{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE GADTs #-}
module Numeric.LAPACK.Matrix.Array.Multiply where

import qualified Numeric.LAPACK.Matrix.Full as Full
import qualified Numeric.LAPACK.Matrix.BandedHermitian as BandedHermitian
import qualified Numeric.LAPACK.Matrix.Banded as Banded
import qualified Numeric.LAPACK.Matrix.Hermitian as Hermitian
import qualified Numeric.LAPACK.Matrix.Symmetric as Symmetric
import qualified Numeric.LAPACK.Matrix.Triangular as Triangular
import qualified Numeric.LAPACK.Matrix.Mosaic.Basic as Mosaic
import qualified Numeric.LAPACK.Matrix.Banded.Basic as BandedBasic
import qualified Numeric.LAPACK.Matrix.Triangular.Basic as TriangularBasic
import qualified Numeric.LAPACK.Matrix.Square.Basic as SquareBasic
import qualified Numeric.LAPACK.Matrix.Basic as FullBasic
import qualified Numeric.LAPACK.Matrix.Type.Private as Matrix
import qualified Numeric.LAPACK.Matrix.Array.Basic as OmniMatrix
import qualified Numeric.LAPACK.Matrix.Array.Unpacked as Unpacked
import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix
import qualified Numeric.LAPACK.Matrix.Shape as MatrixShape
import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout
import qualified Numeric.LAPACK.Matrix.Shape.Omni as Omni
import qualified Numeric.LAPACK.Matrix.Extent.Strict as ExtentStrict
import qualified Numeric.LAPACK.Matrix.Extent.Private as ExtentPriv
import qualified Numeric.LAPACK.Matrix.Extent as Extent
import qualified Numeric.LAPACK.Vector.Private as VectorPriv
import qualified Numeric.LAPACK.Vector as Vector
import Numeric.LAPACK.Matrix.Layout.Private
         (Filled, Empty, Bands, Packed, Unpacked, UnaryProxy, natFromProxy)
import Numeric.LAPACK.Matrix.Array.Banded (Banded)
import Numeric.LAPACK.Matrix.Array.Private (ArrayMatrix, diagTag)
import Numeric.LAPACK.Matrix.Type.Private (Matrix)
import Numeric.LAPACK.Matrix.Modifier (Transposition(NonTransposed,Transposed))
import Numeric.LAPACK.Matrix.Shape.Omni (StripSingleton(StripBands, StripFilled))
import Numeric.LAPACK.Vector (Vector)
import Numeric.LAPACK.Shape.Private (Unchecked(Unchecked, deconsUnchecked))

import qualified Numeric.Netlib.Class as Class

import qualified Data.Array.Comfort.Storable as Array
import qualified Data.Array.Comfort.Shape as Shape

import qualified Type.Data.Num.Unary.Proof as Proof
import qualified Type.Data.Num.Unary as Unary
import qualified Type.Data.Bool as TBool
import Type.Data.Num.Unary (Succ, (:+:))
import Type.Base.Proxy (Proxy(Proxy))

import qualified Data.Stream as Stream
import Data.Stream (Stream)
import Data.Tuple.HT (double)
import Data.Function.HT (Id)



type FactorQuadratic pack property lower upper sh =
      Factor pack property lower upper
         Extent.Shape Extent.Small Extent.Small sh sh

data Factor pack property lower upper meas vert horiz height width where
   FactorUpperTriangular ::
      (Layout.Packing pack, Omni.TriDiag diag) =>
      FactorQuadratic pack diag Empty Filled sh
   FactorLowerTriangular ::
      (Layout.Packing pack, Omni.TriDiag diag) =>
      FactorQuadratic pack diag Filled Empty sh
   FactorSymmetric ::
      (Layout.Packing pack) =>
      FactorQuadratic pack Omni.Symmetric Filled Filled sh
   FactorHermitian ::
      (Layout.Packing pack, TBool.C neg, TBool.C zero, TBool.C pos) =>
      FactorQuadratic pack (Omni.Hermitian neg zero pos) Filled Filled sh
   FactorBanded ::
      (Unary.Natural sub, Unary.Natural super) =>
      Factor Packed Omni.Arbitrary (Bands sub) (Bands super)
         meas vert horiz height width
   FactorBandedHermitian ::
      (TBool.C neg, TBool.C zero, TBool.C pos, Unary.Natural offDiag) =>
      FactorQuadratic Packed (Omni.Hermitian neg zero pos)
         (Bands offDiag) (Bands offDiag) sh
   FactorUnitBandedTriangular ::
      (Omni.BandedTriangular sub super,
       Omni.BandedTriangular super sub) =>
      FactorQuadratic Packed Omni.Unit (Bands sub) (Bands super) sh
   FactorFull ::
      Factor Unpacked property lower upper meas vert horiz height width

factorSingleton ::
   (Layout.Packing pack, Omni.Property property,
    Omni.Strip lower, Omni.Strip upper,
    Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   Omni.Omni pack property lower upper meas vert horiz height width ->
   Factor pack property lower upper meas vert horiz height width
factorSingleton :: Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton Omni pack property lower upper meas vert horiz height width
shape =
   case Omni pack property lower upper meas vert horiz height width
-> PackingSingleton pack
forall pack propery lower upper meas vert horiz height width.
Packing pack =>
Omni pack propery lower upper meas vert horiz height width
-> PackingSingleton pack
Omni.packTag Omni pack property lower upper meas vert horiz height width
shape of
      PackingSingleton pack
Layout.Packed ->
         case Omni pack property lower upper meas vert horiz height width
shape of
            Omni.UpperTriangular UpperTriangular height
_ -> Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Empty Filled sh
FactorUpperTriangular
            Omni.LowerTriangular LowerTriangular height
_ -> Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Filled Empty sh
FactorLowerTriangular
            Omni.Symmetric Symmetric height
_ -> Factor pack property lower upper meas vert horiz height width
forall pack sh.
Packing pack =>
FactorQuadratic pack Symmetric Filled Filled sh
FactorSymmetric
            Omni.Hermitian Hermitian height
_ -> Factor pack property lower upper meas vert horiz height width
forall pack neg zero sub sh.
(Packing pack, C neg, C zero, C sub) =>
FactorQuadratic pack (Hermitian neg zero sub) Filled Filled sh
FactorHermitian
            Omni.Banded Banded sub super meas vert horiz height width
_ -> Factor pack property lower upper meas vert horiz height width
forall sub super meas vert horiz height width.
(Natural sub, Natural super) =>
Factor
  Packed
  Arbitrary
  (Bands sub)
  (Bands super)
  meas
  vert
  horiz
  height
  width
FactorBanded
            Omni.BandedHermitian BandedHermitian offDiag height
_ -> Factor pack property lower upper meas vert horiz height width
forall neg zero pos offDiag sh.
(C neg, C zero, C pos, Natural offDiag) =>
FactorQuadratic
  Packed (Hermitian neg zero pos) (Bands offDiag) (Bands offDiag) sh
FactorBandedHermitian
            Omni.UnitBandedTriangular BandedSquare sub super height
_ -> Factor pack property lower upper meas vert horiz height width
forall sub super sh.
(BandedTriangular sub super, BandedTriangular super sub) =>
FactorQuadratic Packed Unit (Bands sub) (Bands super) sh
FactorUnitBandedTriangular
      PackingSingleton pack
Layout.Unpacked ->
         case (Omni pack property lower upper meas vert horiz height width
-> Extent meas vert horiz height width
forall meas vert horiz pack property lower upper height width.
(Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Extent meas vert horiz height width
Omni.extent Omni pack property lower upper meas vert horiz height width
shape, Omni pack property lower upper meas vert horiz height width
-> PropertySingleton property
forall property pack lower upper meas vert horiz height width.
Property property =>
Omni pack property lower upper meas vert horiz height width
-> PropertySingleton property
Omni.property Omni pack property lower upper meas vert horiz height width
shape, Omni pack property lower upper meas vert horiz height width
-> (StripSingleton lower, StripSingleton upper)
forall lower upper pack property meas vert horiz height width.
(Strip lower, Strip upper) =>
Omni pack property lower upper meas vert horiz height width
-> (StripSingleton lower, StripSingleton upper)
Omni.strips Omni pack property lower upper meas vert horiz height width
shape) of
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropArbitrary,
               (StripBands HeadSingleton offDiag
Unary.Zero, StripSingleton upper
StripFilled)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Empty Filled sh
FactorUpperTriangular
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropArbitrary,
               (StripSingleton lower
StripFilled, StripBands HeadSingleton offDiag
Unary.Zero)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Filled Empty sh
FactorLowerTriangular
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropUnit,
               (StripBands HeadSingleton offDiag
Unary.Zero, StripSingleton upper
StripFilled)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Empty Filled sh
FactorUpperTriangular
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropUnit,
               (StripSingleton lower
StripFilled, StripBands HeadSingleton offDiag
Unary.Zero)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack diag sh.
(Packing pack, TriDiag diag) =>
FactorQuadratic pack diag Filled Empty sh
FactorLowerTriangular
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropSymmetric,
               (StripSingleton lower
StripFilled, StripSingleton upper
StripFilled)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack sh.
Packing pack =>
FactorQuadratic pack Symmetric Filled Filled sh
FactorSymmetric
            (ExtentPriv.Square height
_, PropertySingleton property
Omni.PropHermitian,
               (StripSingleton lower
StripFilled, StripSingleton upper
StripFilled)) ->
                  Factor pack property lower upper meas vert horiz height width
forall pack neg zero sub sh.
(Packing pack, C neg, C zero, C sub) =>
FactorQuadratic pack (Hermitian neg zero sub) Filled Filled sh
FactorHermitian
            (Extent meas vert horiz height width, PropertySingleton property,
 (StripSingleton lower, StripSingleton upper))
_ -> Factor pack property lower upper meas vert horiz height width
forall property lower upper meas vert horiz height width.
Factor Unpacked property lower upper meas vert horiz height width
FactorFull

matrixVector ::
   (Layout.Packing pack) =>
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Shape.C width, Eq width, Class.Floating a) =>
   ArrayMatrix pack property lower upper meas vert horiz height width a ->
   Vector width a -> Vector height a
matrixVector :: ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Vector width a -> Vector height a
matrixVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
a Vector width a
x =
   case Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton (Omni pack property lower upper meas vert horiz height width
 -> Factor pack property lower upper meas vert horiz height width)
-> Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
forall a b. (a -> b) -> a -> b
$ ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape ArrayMatrix
  pack property lower upper meas vert horiz height width a
a of
      Factor pack property lower upper meas vert horiz height width
FactorFull -> Full meas vert horiz height width a
-> Vector width a -> Vector height a
forall meas vert horiz height width a.
(Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Vector width a -> Vector height a
Full.multiplyVector (ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  pack property lower upper meas vert horiz height width a
a) Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorUpperTriangular -> TriangularP pack lower property upper height a
-> Vector height a -> Vector height a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a -> Vector sh a -> Vector sh a
Triangular.multiplyVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
TriangularP pack lower property upper height a
a Vector height a
Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorLowerTriangular -> TriangularP pack lower property upper height a
-> Vector height a -> Vector height a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a -> Vector sh a -> Vector sh a
Triangular.multiplyVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
TriangularP pack lower property upper height a
a Vector height a
Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorSymmetric -> SymmetricP pack height a -> Vector height a -> Vector height a
forall pack sh a.
(Packing pack, C sh, Eq sh, Floating a) =>
SymmetricP pack sh a -> Vector sh a -> Vector sh a
Symmetric.multiplyVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
SymmetricP pack height a
a Vector height a
Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorHermitian -> Transposition
-> FlexHermitianP pack neg zero pos height a
-> Vector height a
-> Vector height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Eq sh, Floating a) =>
Transposition
-> FlexHermitianP pack neg zero pos sh a
-> Vector sh a
-> Vector sh a
Hermitian.multiplyVector Transposition
NonTransposed ArrayMatrix
  pack property lower upper meas vert horiz height width a
FlexHermitianP pack neg zero pos height a
a Vector height a
Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorBanded -> Banded sub super meas vert horiz height width a
-> Vector width a -> Vector height a
forall sub super meas vert horiz height width a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Banded sub super meas vert horiz height width a
-> Vector width a -> Vector height a
Banded.multiplyVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
Banded sub super meas vert horiz height width a
a Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorUnitBandedTriangular ->
         Banded sub super Shape Small Small height width a
-> Vector width a -> Vector height a
forall sub super meas vert horiz height width a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Banded sub super meas vert horiz height width a
-> Vector width a -> Vector height a
BandedBasic.multiplyVector (ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> PlainArray
     pack property lower upper 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 ArrayMatrix
  pack property lower upper meas vert horiz height width a
a) Vector width a
x
      Factor pack property lower upper meas vert horiz height width
FactorBandedHermitian ->
         Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Vector height a
-> Vector height a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Eq size,
 Floating a) =>
Transposition
-> FlexHermitian neg zero pos offDiag size a
-> Vector size a
-> Vector size a
BandedHermitian.multiplyVector Transposition
NonTransposed ArrayMatrix
  pack property lower upper meas vert horiz height width a
FlexHermitian neg zero pos offDiag height a
a Vector height a
Vector width a
x

vectorMatrix ::
   (Layout.Packing pack) =>
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Eq height, Shape.C width, Class.Floating a) =>
   Vector height a ->
   ArrayMatrix pack property lower upper meas vert horiz height width a ->
   Vector width a
vectorMatrix :: Vector height a
-> ArrayMatrix
     pack property lower upper meas vert horiz height width a
-> Vector width a
vectorMatrix Vector height a
x ArrayMatrix
  pack property lower upper meas vert horiz height width a
a =
   case Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton (Omni pack property lower upper meas vert horiz height width
 -> Factor pack property lower upper meas vert horiz height width)
-> Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
forall a b. (a -> b) -> a -> b
$ ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape ArrayMatrix
  pack property lower upper meas vert horiz height width a
a of
      Factor pack property lower upper meas vert horiz height width
FactorFull ->
         Full meas horiz vert width height a
-> Vector height a -> Vector width a
forall meas vert horiz height width a.
(Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Vector width a -> Vector height a
Full.multiplyVector (ArrayMatrix
  Unpacked property upper lower meas horiz vert width height a
-> Full meas horiz vert width height a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull (ArrayMatrix
   Unpacked property upper lower meas horiz vert width height a
 -> Full meas horiz vert width height a)
-> ArrayMatrix
     Unpacked property upper lower meas horiz vert width height a
-> Full meas horiz vert width height a
forall a b. (a -> b) -> a -> b
$ Unpacked property lower upper meas vert horiz height width a
-> ArrayMatrix
     Unpacked property upper lower meas horiz vert width height a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper, Measure meas, C vert,
 C horiz) =>
Unpacked property lower upper meas vert horiz height width a
-> Unpacked property upper lower meas horiz vert width height a
Unpacked.transpose ArrayMatrix
  pack property lower upper meas vert horiz height width a
Unpacked property lower upper meas vert horiz height width a
a) Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorUpperTriangular ->
         TriangularP pack upper property lower height a
-> Vector height a -> Vector height a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a -> Vector sh a -> Vector sh a
Triangular.multiplyVector (TriangularP pack lower property upper height a
-> TriangularP pack upper property lower height a
forall lo up diag sh a pack.
(PowerStrip lo, PowerStrip up, TriDiag diag, C sh, Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack up diag lo sh a
Triangular.transpose ArrayMatrix
  pack property lower upper meas vert horiz height width a
TriangularP pack lower property upper height a
a) Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorLowerTriangular ->
         TriangularP pack upper property lower height a
-> Vector height a -> Vector height a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a -> Vector sh a -> Vector sh a
Triangular.multiplyVector (TriangularP pack lower property upper height a
-> TriangularP pack upper property lower height a
forall lo up diag sh a pack.
(PowerStrip lo, PowerStrip up, TriDiag diag, C sh, Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack up diag lo sh a
Triangular.transpose ArrayMatrix
  pack property lower upper meas vert horiz height width a
TriangularP pack lower property upper height a
a) Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorSymmetric -> SymmetricP pack height a -> Vector height a -> Vector height a
forall pack sh a.
(Packing pack, C sh, Eq sh, Floating a) =>
SymmetricP pack sh a -> Vector sh a -> Vector sh a
Symmetric.multiplyVector ArrayMatrix
  pack property lower upper meas vert horiz height width a
SymmetricP pack height a
a Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorHermitian -> Transposition
-> FlexHermitianP pack neg zero pos height a
-> Vector height a
-> Vector height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Eq sh, Floating a) =>
Transposition
-> FlexHermitianP pack neg zero pos sh a
-> Vector sh a
-> Vector sh a
Hermitian.multiplyVector Transposition
Transposed ArrayMatrix
  pack property lower upper meas vert horiz height width a
FlexHermitianP pack neg zero pos height a
a Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorBanded -> Banded super sub meas horiz vert width height a
-> Vector height a -> Vector width a
forall sub super meas vert horiz height width a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Banded sub super meas vert horiz height width a
-> Vector width a -> Vector height a
Banded.multiplyVector (FlexBanded property sub super meas vert horiz height width a
-> FlexBanded property super sub meas horiz vert width height a
forall diag sub super meas vert horiz height width a.
(TriDiag diag, Natural sub, Natural super, Measure meas, C vert,
 C horiz) =>
FlexBanded diag sub super meas vert horiz height width a
-> FlexBanded diag super sub meas horiz vert width height a
Banded.transpose ArrayMatrix
  pack property lower upper meas vert horiz height width a
FlexBanded property sub super meas vert horiz height width a
a) Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorUnitBandedTriangular ->
         Banded super sub Shape Small Small width height a
-> Vector height a -> Vector width a
forall sub super meas vert horiz height width a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Banded sub super meas vert horiz height width a
-> Vector width a -> Vector height a
BandedBasic.multiplyVector
            (Banded sub super Shape Small Small height width a
-> Banded super sub Shape Small Small width height a
forall meas vert horiz sub super height width a.
(Measure meas, C vert, C horiz) =>
Banded sub super meas vert horiz height width a
-> Banded super sub meas horiz vert width height a
BandedBasic.transpose (Banded sub super Shape Small Small height width a
 -> Banded super sub Shape Small Small width height a)
-> Banded sub super Shape Small Small height width a
-> Banded super sub Shape Small Small width height a
forall a b. (a -> b) -> a -> b
$ ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> PlainArray
     pack property lower upper 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 ArrayMatrix
  pack property lower upper meas vert horiz height width a
a) Vector height a
x
      Factor pack property lower upper meas vert horiz height width
FactorBandedHermitian ->
         Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Vector height a
-> Vector height a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Eq size,
 Floating a) =>
Transposition
-> FlexHermitian neg zero pos offDiag size a
-> Vector size a
-> Vector size a
BandedHermitian.multiplyVector Transposition
Transposed ArrayMatrix
  pack property lower upper meas vert horiz height width a
FlexHermitian neg zero pos offDiag height a
a Vector height a
x


{- ToDo:
We can remove the transposition parameter
if we can transpose Hermitian in constant time.
Then we can express all variations using 'transpose'.
-}
transposableSquare ::
   (Layout.Packing pack) =>
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Eq height, Shape.C width, Class.Floating a) =>
   Transposition ->
   ArrMatrix.Quadratic pack property lower upper height a ->
   ArrMatrix.Full meas vert horiz height width a ->
   ArrMatrix.Full meas vert horiz height width a
transposableSquare :: Transposition
-> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
transposableSquare Transposition
trans Quadratic pack property lower upper height a
a =
   ((Quadratic pack property lower upper height a
 -> Full meas vert horiz height width a
 -> Full meas vert horiz height width a)
-> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$Quadratic pack property lower upper height a
a) ((Quadratic pack property lower upper height a
  -> Full 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)
-> (Quadratic pack property lower upper height a
    -> Full 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
forall a b. (a -> b) -> a -> b
$
   case Quadratic pack property lower upper height a
-> Omni pack property lower upper Shape Small Small height height
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper height a
a of
      Omni.Hermitian Hermitian height
_ -> Transposition
-> FlexHermitianP pack neg zero pos height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack neg zero pos meas vert horiz height width a.
(Packing pack, C neg, C zero, C pos, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Transposition
-> FlexHermitianP pack neg zero pos height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
Hermitian.multiplyFull Transposition
trans
      Omni.BandedHermitian BandedHermitian offDiag height
_ -> Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall neg zero pos offDiag meas vert horiz height width a.
(C neg, C zero, C pos, Natural offDiag, Measure meas, C vert,
 C horiz, C height, Eq height, C width, Floating a) =>
Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
BandedHermitian.multiplyFull Transposition
trans
      Omni pack property lower upper Shape Small Small height height
_ ->
         case Transposition
trans of
            Transposition
Transposed -> Quadratic pack property upper lower height a
-> 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.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull (Quadratic pack property upper lower height a
 -> Full meas vert horiz height width a
 -> Full meas vert horiz height width a)
-> (Quadratic pack property lower upper height a
    -> Quadratic pack property upper lower height a)
-> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Quadratic pack property lower upper height a
-> Quadratic pack property upper lower height a
forall typ xl xu meas vert horiz height width a lower upper.
(Transpose typ, TransposeExtra typ xl, TransposeExtra typ xu,
 Measure meas, C vert, C horiz, C height, C width, Floating a) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Matrix typ xu xl upper lower meas horiz vert width height a
Matrix.transpose
            Transposition
NonTransposed -> Quadratic pack property lower upper height a
-> 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.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull

extentFromSquare ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   Extent.Map Extent.Shape Extent.Small Extent.Small meas vert horiz size size
extentFromSquare :: Map Shape Small Small meas vert horiz size size
extentFromSquare = Map Shape Small Small meas vert horiz size size
-> Map Shape Small Small meas vert horiz size size
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.Map Map Shape Small Small meas vert horiz size size
forall meas vert horiz size.
(Measure meas, C vert, C horiz) =>
Square size -> Extent meas vert horiz size size
ExtentPriv.fromSquare

fullSquare ::
   (Layout.Packing pack) =>
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Shape.C width, Eq width, Class.Floating a) =>
   ArrMatrix.Full meas vert horiz height width a ->
   ArrMatrix.Quadratic pack property lower upper width a ->
   ArrMatrix.Full meas vert horiz height width a
fullSquare :: Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare = (Quadratic pack property lower upper width a
 -> Matrix
      (Array Unpacked Arbitrary)
      ()
      ()
      Filled
      Filled
      meas
      horiz
      vert
      width
      height
      a
 -> Matrix
      (Array Unpacked Arbitrary)
      ()
      ()
      Filled
      Filled
      meas
      horiz
      vert
      width
      height
      a)
-> Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
forall typA typB xlA xuA xlB xuB measA vertA horizA measB vertB
       horizB heightA widthA heightB widthB a matrix upperA lowerA upperB
       lowerB.
(Transpose typA, Transpose typB, TransposeExtra typA xlA,
 TransposeExtra typA xuA, TransposeExtra typB xlB,
 TransposeExtra typB xuB, Measure measA, C vertA, C horizA,
 Measure measB, C vertB, C horizB, C heightA, C widthA, C heightB,
 C widthB, Floating a) =>
(matrix
 -> Matrix
      typA xuA xlA upperA lowerA measA horizA vertA widthA heightA a
 -> Matrix
      typB xuB xlB upperB lowerB measB horizB vertB widthB heightB a)
-> Matrix
     typA xlA xuA lowerA upperA measA vertA horizA heightA widthA a
-> matrix
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB heightB widthB a
Matrix.swapMultiply ((Quadratic pack property lower upper width a
  -> Matrix
       (Array Unpacked Arbitrary)
       ()
       ()
       Filled
       Filled
       meas
       horiz
       vert
       width
       height
       a
  -> Matrix
       (Array Unpacked Arbitrary)
       ()
       ()
       Filled
       Filled
       meas
       horiz
       vert
       width
       height
       a)
 -> Full meas vert horiz height width a
 -> Quadratic pack property lower upper width a
 -> Full meas vert horiz height width a)
-> (Quadratic pack property lower upper width a
    -> Matrix
         (Array Unpacked Arbitrary)
         ()
         ()
         Filled
         Filled
         meas
         horiz
         vert
         width
         height
         a
    -> Matrix
         (Array Unpacked Arbitrary)
         ()
         ()
         Filled
         Filled
         meas
         horiz
         vert
         width
         height
         a)
-> Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$ Transposition
-> Quadratic pack property lower upper width a
-> Matrix
     (Array Unpacked Arbitrary)
     ()
     ()
     Filled
     Filled
     meas
     horiz
     vert
     width
     height
     a
-> Matrix
     (Array Unpacked Arbitrary)
     ()
     ()
     Filled
     Filled
     meas
     horiz
     vert
     width
     height
     a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Transposition
-> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
transposableSquare Transposition
Transposed

squareFull ::
   (Layout.Packing pack) =>
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Eq height, Shape.C width, Class.Floating a) =>
   ArrMatrix.Quadratic pack property lower upper height a ->
   ArrMatrix.Full meas vert horiz height width a ->
   ArrMatrix.Full meas vert horiz height width a
squareFull :: Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull Quadratic pack property lower upper height a
a =
   case Omni pack property lower upper Shape Small Small height height
-> Factor pack property lower upper Shape Small Small height height
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton (Omni pack property lower upper Shape Small Small height height
 -> Factor
      pack property lower upper Shape Small Small height height)
-> Omni pack property lower upper Shape Small Small height height
-> Factor pack property lower upper Shape Small Small height height
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper height a
-> Omni pack property lower upper Shape Small Small height height
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper height a
a of
      Factor pack property lower upper Shape Small Small height height
FactorFull -> Unpacked property lower upper meas vert horiz height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall propertyA lowerA upperA propertyB lowerB upperB propertyC
       lowerC upperC meas vert horiz height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height fuse a
-> Unpacked propertyB upperB lowerB meas vert horiz fuse width a
-> Unpacked propertyC upperC lowerC meas vert horiz height width a
Unpacked.multiply (Unpacked property lower upper meas vert horiz height height a
 -> Full meas vert horiz height width a
 -> Full meas vert horiz height width a)
-> Unpacked property lower upper meas vert horiz height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$ Map Shape Small Small meas vert horiz height height
-> Unpacked property lower upper Shape Small Small height height a
-> Unpacked property lower upper meas vert horiz height height a
forall property lower upper measA vertA horizA measB vertB horizB
       height width a.
(Property property, Strip lower, Strip upper, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Unpacked property lower upper measA vertA horizA height width a
-> Unpacked property lower upper measB vertB horizB height width a
Unpacked.mapExtent Map Shape Small Small meas vert horiz height height
forall meas vert horiz size.
(Measure meas, C vert, C horiz) =>
Map Shape Small Small meas vert horiz size size
extentFromSquare Quadratic pack property lower upper height a
Unpacked property lower upper Shape Small Small height height a
a
      Factor pack property lower upper Shape Small Small height height
FactorUpperTriangular -> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack lo up diag meas vert horiz height width a.
(Packing pack, UpLo lo up, TriDiag diag, Measure meas, C vert,
 C horiz, C height, Eq height, C width, Floating a) =>
TriangularP pack lo diag up height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
Triangular.multiplyFull Quadratic pack property lower upper height a
a
      Factor pack property lower upper Shape Small Small height height
FactorLowerTriangular -> Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack lo up diag meas vert horiz height width a.
(Packing pack, UpLo lo up, TriDiag diag, Measure meas, C vert,
 C horiz, C height, Eq height, C width, Floating a) =>
TriangularP pack lo diag up height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
Triangular.multiplyFull Quadratic pack property lower upper height a
a
      Factor pack property lower upper Shape Small Small height height
FactorSymmetric -> SymmetricP pack height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack meas vert horiz height width a.
(Packing pack, Measure meas, C vert, C horiz, C height, Eq height,
 C width, Floating a) =>
SymmetricP pack height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
Symmetric.multiplyFull Quadratic pack property lower upper height a
SymmetricP pack height a
a
      Factor pack property lower upper Shape Small Small height height
FactorHermitian -> Transposition
-> FlexHermitianP pack neg zero pos height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack neg zero pos meas vert horiz height width a.
(Packing pack, C neg, C zero, C pos, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Transposition
-> FlexHermitianP pack neg zero pos height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
Hermitian.multiplyFull Transposition
NonTransposed Quadratic pack property lower upper height a
FlexHermitianP pack neg zero pos height a
a
      Factor pack property lower upper Shape Small Small height height
FactorBanded -> Banded sub super meas vert horiz height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall sub super meas vert horiz height width fuse a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, C fuse, Eq fuse, Floating a) =>
Banded sub super meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
Banded.multiplyFull (Banded sub super meas vert horiz height height a
 -> Full meas vert horiz height width a
 -> Full meas vert horiz height width a)
-> Banded sub super meas vert horiz height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$ Map Shape Small Small meas vert horiz height height
-> Banded sub super Shape Small Small height height a
-> Banded sub super meas vert horiz height height a
forall vertA horizA vertB horizB sub super measA measB height width
       a.
(C vertA, C horizA, C vertB, C horizB, Natural sub,
 Natural super) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
Banded.mapExtent Map Shape Small Small meas vert horiz height height
forall meas vert horiz size.
(Measure meas, C vert, C horiz) =>
Map Shape Small Small meas vert horiz size size
extentFromSquare Quadratic pack property lower upper height a
Banded sub super Shape Small Small height height a
a
      Factor pack property lower upper Shape Small Small height height
FactorBandedHermitian -> Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall neg zero pos offDiag meas vert horiz height width a.
(C neg, C zero, C pos, Natural offDiag, Measure meas, C vert,
 C horiz, C height, Eq height, C width, Floating a) =>
Transposition
-> FlexHermitian neg zero pos offDiag height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
BandedHermitian.multiplyFull Transposition
NonTransposed Quadratic pack property lower upper height a
FlexHermitian neg zero pos offDiag height a
a
      Factor pack property lower upper Shape Small Small height height
FactorUnitBandedTriangular ->
         (PlainArray
   pack property lower upper Shape Small Small height height a
 -> PlainArray
      Unpacked Arbitrary Filled Filled meas vert horiz height width a
 -> PlainArray
      Unpacked Arbitrary Filled Filled meas vert horiz height width a)
-> Quadratic pack property lower upper height a
-> Full meas vert horiz height 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 packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2
            (Banded sub super meas vert horiz height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall sub super meas vert horiz height width fuse a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, C fuse, Eq fuse, Floating a) =>
Banded sub super meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
BandedBasic.multiplyFull (Banded sub super meas vert horiz height height a
 -> Full meas vert horiz height width a
 -> Full meas vert horiz height width a)
-> (Banded sub super Shape Small Small height height a
    -> Banded sub super meas vert horiz height height a)
-> Banded sub super Shape Small Small height height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
             Map Shape Small Small meas vert horiz height height
-> Banded sub super Shape Small Small height height a
-> Banded sub super meas vert horiz height height a
forall vertA horizA vertB horizB measA measB height width sub super
       a.
(C vertA, C horizA, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
BandedBasic.mapExtent Map Shape Small Small meas vert horiz height height
forall meas vert horiz size.
(Measure meas, C vert, C horiz) =>
Square size -> Extent meas vert horiz size size
ExtentPriv.fromSquare) Quadratic pack property lower upper height a
a


vectorSquare :: (Shape.C sh, Class.Floating a) => Vector sh a -> Vector sh a
vectorSquare :: Vector sh a -> Vector sh a
vectorSquare =
   Array (Unchecked sh) a -> Vector sh a
forall sh a. Array (Unchecked sh) a -> Array sh a
VectorPriv.recheck (Array (Unchecked sh) a -> Vector sh a)
-> (Vector sh a -> Array (Unchecked sh) a)
-> Vector sh a
-> Vector sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array (Unchecked sh) a
 -> Array (Unchecked sh) a -> Array (Unchecked sh) a)
-> (Array (Unchecked sh) a, Array (Unchecked sh) a)
-> Array (Unchecked sh) a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Array (Unchecked sh) a
-> Array (Unchecked sh) a -> Array (Unchecked sh) a
forall sh a.
(C sh, Eq sh, Floating a) =>
Vector sh a -> Vector sh a -> Vector sh a
Vector.mul ((Array (Unchecked sh) a, Array (Unchecked sh) a)
 -> Array (Unchecked sh) a)
-> (Vector sh a
    -> (Array (Unchecked sh) a, Array (Unchecked sh) a))
-> Vector sh a
-> Array (Unchecked sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array (Unchecked sh) a
-> (Array (Unchecked sh) a, Array (Unchecked sh) a)
forall a. a -> (a, a)
double (Array (Unchecked sh) a
 -> (Array (Unchecked sh) a, Array (Unchecked sh) a))
-> (Vector sh a -> Array (Unchecked sh) a)
-> Vector sh a
-> (Array (Unchecked sh) a, Array (Unchecked sh) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector sh a -> Array (Unchecked sh) a
forall sh a. Array sh a -> Array (Unchecked sh) a
VectorPriv.uncheck

square ::
   (Layout.Packing pack, Omni.Property property) =>
   (MatrixShape.PowerStrip lower, MatrixShape.PowerStrip upper) =>
   (Shape.C sh, Class.Floating a) =>
   ArrMatrix.Quadratic pack property lower upper sh a ->
   ArrMatrix.Quadratic pack property lower upper sh a
square :: Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
square Quadratic pack property lower upper sh a
a =
   case Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Power pack property lower upper meas vert horiz height width
Omni.powerSingleton (Omni pack property lower upper Shape Small Small sh sh
 -> Power pack property lower upper Shape Small Small sh sh)
-> Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerIdentity -> Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerUpperTriangular -> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
Triangular.square Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerLowerTriangular -> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
Triangular.square Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerSymmetric -> SymmetricP pack sh a -> SymmetricP pack sh a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> SymmetricP pack sh a
Symmetric.square Quadratic pack property lower upper sh a
SymmetricP pack sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerHermitian -> FlexHermitianP pack neg zero pos sh a
-> FlexHermitianP pack neg zero pos sh a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a
-> FlexHermitianP pack neg zero pos sh a
Hermitian.square Quadratic pack property lower upper sh a
FlexHermitianP pack neg zero pos sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerFull -> (FullArray Shape Small Small sh sh a
 -> FullArray Shape Small Small sh sh a)
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 FullArray Shape Small Small sh sh a
-> FullArray Shape Small Small sh sh a
forall sh a. (C sh, Floating a) => Square sh a -> Square sh a
SquareBasic.square Quadratic pack property lower upper sh a
UnpackedMatrix property lower upper Shape Small Small sh sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerDiagonal ->
         case Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
            Omni.Banded Banded sub super Shape Small Small sh sh
_ -> (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 PlainArray pack property lower upper Shape Small Small sh sh a
-> PlainArray pack property lower upper Shape Small Small sh sh a
forall sh a. (C sh, Floating a) => Vector sh a -> Vector sh a
vectorSquare Quadratic pack property lower upper sh a
a
            -- ToDo: could be optimized by processing only the real part
            Omni.BandedHermitian BandedHermitian offDiag sh
_ -> (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 PlainArray pack property lower upper Shape Small Small sh sh a
-> PlainArray pack property lower upper Shape Small Small sh sh a
forall sh a. (C sh, Floating a) => Vector sh a -> Vector sh a
vectorSquare Quadratic pack property lower upper sh a
a
            Omni.UnitBandedTriangular BandedSquare sub super sh
_ -> Quadratic pack property lower upper sh a
a
            Omni.Full Full Shape Small Small sh sh
_ ->
               (FullArray Shape Small Small sh sh a
 -> FullArray Shape Small Small sh sh a)
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1
                  (Order -> Vector sh a -> FullArray Shape Small Small sh sh a
forall sh a.
(C sh, Floating a) =>
Order -> Vector sh a -> Square sh a
SquareBasic.diagonalOrder (Quadratic pack property lower upper sh a -> Order
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Order
ArrMatrix.order Quadratic pack property lower upper sh a
a) (Vector sh a -> FullArray Shape Small Small sh sh a)
-> (FullArray Shape Small Small sh sh a -> Vector sh a)
-> FullArray Shape Small Small sh sh a
-> FullArray Shape Small Small sh sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                   Vector sh a -> Vector sh a
forall sh a. (C sh, Floating a) => Vector sh a -> Vector sh a
vectorSquare (Vector sh a -> Vector sh a)
-> (FullArray Shape Small Small sh sh a -> Vector sh a)
-> FullArray Shape Small Small sh sh a
-> Vector sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FullArray Shape Small Small sh sh a -> Vector sh a
forall sh a. (C sh, Floating a) => Square sh a -> Vector sh a
SquareBasic.takeDiagonal)
                  Quadratic pack property lower upper sh a
UnpackedMatrix property lower upper Shape Small Small sh sh a
a

power ::
   (Layout.Packing pack, Omni.Property property) =>
   (MatrixShape.PowerStrip lower, MatrixShape.PowerStrip upper) =>
   (Shape.C sh, Class.Floating a) =>
   Integer ->
   ArrMatrix.Quadratic pack property lower upper sh a ->
   ArrMatrix.Quadratic pack property lower upper sh a
power :: Integer
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
power Integer
n Quadratic pack property lower upper sh a
a =
   case Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Power pack property lower upper meas vert horiz height width
Omni.powerSingleton (Omni pack property lower upper Shape Small Small sh sh
 -> Power pack property lower upper Shape Small Small sh sh)
-> Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerIdentity -> Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerUpperTriangular ->
         (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 (DiagSingleton property
-> Integer
-> Mosaic pack NoMirror Upper sh a
-> Mosaic pack NoMirror Upper sh a
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Integer
-> Mosaic pack mirror uplo sh a
-> Mosaic pack mirror uplo sh a
Mosaic.power (Quadratic pack property lower upper sh a -> DiagSingleton property
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag Quadratic pack property lower upper sh a
a) Integer
n) Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerLowerTriangular ->
         (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 (DiagSingleton property
-> Integer
-> Mosaic pack NoMirror Lower sh a
-> Mosaic pack NoMirror Lower sh a
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Integer
-> Mosaic pack mirror uplo sh a
-> Mosaic pack mirror uplo sh a
Mosaic.power (Quadratic pack property lower upper sh a -> DiagSingleton property
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag Quadratic pack property lower upper sh a
a) Integer
n) Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerSymmetric ->
         (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 (DiagSingleton Arbitrary
-> Integer
-> Mosaic pack SimpleMirror Upper sh a
-> Mosaic pack SimpleMirror Upper sh a
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Integer
-> Mosaic pack mirror uplo sh a
-> Mosaic pack mirror uplo sh a
Mosaic.power DiagSingleton Arbitrary
Omni.Arbitrary Integer
n) Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerHermitian ->
         (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 (DiagSingleton Arbitrary
-> Integer
-> Mosaic pack ConjugateMirror Upper sh a
-> Mosaic pack ConjugateMirror Upper sh a
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Integer
-> Mosaic pack mirror uplo sh a
-> Mosaic pack mirror uplo sh a
Mosaic.power DiagSingleton Arbitrary
Omni.Arbitrary Integer
n) Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerFull ->
         (FullArray Shape Small Small sh sh a
 -> FullArray Shape Small Small sh sh a)
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 (Integer
-> FullArray Shape Small Small sh sh a
-> FullArray Shape Small Small sh sh a
forall sh a.
(C sh, Floating a) =>
Integer -> Square sh a -> Square sh a
SquareBasic.power Integer
n) Quadratic pack property lower upper sh a
UnpackedMatrix property lower upper Shape Small Small sh sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerDiagonal ->
         case Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
            Omni.Banded Banded sub super Shape Small Small sh sh
_ -> (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 ((a -> a)
-> Array (Banded Zero Zero Shape Small Small sh sh) a
-> Array (Banded Zero Zero Shape Small Small sh sh) a
forall sh a b.
(C sh, Storable a, Storable b) =>
(a -> b) -> Array sh a -> Array sh b
Array.map (a -> Integer -> a
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
n)) Quadratic pack property lower upper sh a
a
            Omni.BandedHermitian BandedHermitian offDiag sh
_ -> (PlainArray pack property lower upper Shape Small Small sh sh a
 -> PlainArray pack property lower upper Shape Small Small sh sh a)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh 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 ((a -> a)
-> Array (BandedHermitian Zero sh) a
-> Array (BandedHermitian Zero sh) a
forall sh a b.
(C sh, Storable a, Storable b) =>
(a -> b) -> Array sh a -> Array sh b
Array.map (a -> Integer -> a
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
n)) Quadratic pack property lower upper sh a
a
            Omni.UnitBandedTriangular BandedSquare sub super sh
_ -> Quadratic pack property lower upper sh a
a
            Omni.Full Full Shape Small Small sh sh
_ ->
               (FullArray Shape Small Small sh sh a
 -> FullArray Shape Small Small sh sh a)
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1
                  (Order -> Vector sh a -> FullArray Shape Small Small sh sh a
forall sh a.
(C sh, Floating a) =>
Order -> Vector sh a -> Square sh a
SquareBasic.diagonalOrder (Quadratic pack property lower upper sh a -> Order
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Order
ArrMatrix.order Quadratic pack property lower upper sh a
a) (Vector sh a -> FullArray Shape Small Small sh sh a)
-> (FullArray Shape Small Small sh sh a -> Vector sh a)
-> FullArray Shape Small Small sh sh a
-> FullArray Shape Small Small sh sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                   (a -> a) -> Vector sh a -> Vector sh a
forall sh a b.
(C sh, Storable a, Storable b) =>
(a -> b) -> Array sh a -> Array sh b
Array.map (a -> Integer -> a
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
n) (Vector sh a -> Vector sh a)
-> (FullArray Shape Small Small sh sh a -> Vector sh a)
-> FullArray Shape Small Small sh sh a
-> Vector sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FullArray Shape Small Small sh sh a -> Vector sh a
forall sh a. (C sh, Floating a) => Square sh a -> Vector sh a
SquareBasic.takeDiagonal)
                  Quadratic pack property lower upper sh a
UnpackedMatrix property lower upper Shape Small Small sh sh a
a

powers, powers1 ::
   (Layout.Packing pack, Omni.Property property) =>
   (MatrixShape.PowerStrip lower, MatrixShape.PowerStrip upper) =>
   (Shape.C sh, Class.Floating a) =>
   ArrMatrix.Quadratic pack property lower upper sh a ->
   Stream (ArrMatrix.Quadratic pack property lower upper sh a)
powers :: Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
powers Quadratic pack property lower upper sh a
a = Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall a. a -> Stream a -> Stream a
Stream.Cons (Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
forall sh a pack property lower upper.
(C sh, Floating a) =>
Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper sh a
OmniMatrix.identityFrom Quadratic pack property lower upper sh a
a) (Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
forall pack property lower upper sh a.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, C sh, Floating a) =>
Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
powers1 Quadratic pack property lower upper sh a
a)
powers1 :: Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
powers1 Quadratic pack property lower upper sh a
a =
   case Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Power pack property lower upper meas vert horiz height width
Omni.powerSingleton (Omni pack property lower upper Shape Small Small sh sh
 -> Power pack property lower upper Shape Small Small sh sh)
-> Omni pack property lower upper Shape Small Small sh sh
-> Power pack property lower upper Shape Small Small sh sh
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerIdentity -> Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
forall a. a -> Stream a
Stream.repeat Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerUpperTriangular -> Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall pack property lower upper sh a.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, C sh, Floating a) =>
Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
powers1Gen Quadratic pack property lower upper sh a
a Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
Triangular.multiply
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerLowerTriangular -> Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall pack property lower upper sh a.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, C sh, Floating a) =>
Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
powers1Gen Quadratic pack property lower upper sh a
a Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
forall pack lo up diag sh a.
(Packing pack, UpLo lo up, TriDiag diag, C sh, Eq sh,
 Floating a) =>
TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
-> TriangularP pack lo diag up sh a
Triangular.multiply
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerSymmetric ->
         (Mosaic pack SimpleMirror Upper sh a
 -> Quadratic pack property lower upper sh a)
-> Stream (Mosaic pack SimpleMirror Upper sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Mosaic pack SimpleMirror Upper sh a
-> Quadratic pack property lower upper sh 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 (Stream (Mosaic pack SimpleMirror Upper sh a)
 -> Stream (Quadratic pack property lower upper sh a))
-> Stream (Mosaic pack SimpleMirror Upper sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$
         DiagSingleton Arbitrary
-> Mosaic pack SimpleMirror Upper sh a
-> Stream (Mosaic pack SimpleMirror Upper sh a)
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Mosaic pack mirror uplo sh a
-> Stream (Mosaic pack mirror uplo sh a)
Mosaic.powers1 DiagSingleton Arbitrary
Omni.Arbitrary (Mosaic pack SimpleMirror Upper sh a
 -> Stream (Mosaic pack SimpleMirror Upper sh a))
-> Mosaic pack SimpleMirror Upper sh a
-> Stream (Mosaic pack SimpleMirror Upper sh a)
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> PlainArray pack property lower upper Shape Small Small sh sh 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 Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerHermitian ->
         (Mosaic pack ConjugateMirror Upper sh a
 -> Quadratic pack property lower upper sh a)
-> Stream (Mosaic pack ConjugateMirror Upper sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Mosaic pack ConjugateMirror Upper sh a
-> Quadratic pack property lower upper sh 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 (Stream (Mosaic pack ConjugateMirror Upper sh a)
 -> Stream (Quadratic pack property lower upper sh a))
-> Stream (Mosaic pack ConjugateMirror Upper sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$
         DiagSingleton Arbitrary
-> Mosaic pack ConjugateMirror Upper sh a
-> Stream (Mosaic pack ConjugateMirror Upper sh a)
forall pack diag uplo sh a mirror.
(Packing pack, TriDiag diag, UpLo uplo, C sh, Floating a) =>
DiagSingleton diag
-> Mosaic pack mirror uplo sh a
-> Stream (Mosaic pack mirror uplo sh a)
Mosaic.powers1 DiagSingleton Arbitrary
Omni.Arbitrary (Mosaic pack ConjugateMirror Upper sh a
 -> Stream (Mosaic pack ConjugateMirror Upper sh a))
-> Mosaic pack ConjugateMirror Upper sh a
-> Stream (Mosaic pack ConjugateMirror Upper sh a)
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> PlainArray pack property lower upper Shape Small Small sh sh 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 Quadratic pack property lower upper sh a
a
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerFull ->
         Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall pack property lower upper sh a.
(Packing pack, Property property, PowerStrip lower,
 PowerStrip upper, C sh, Floating a) =>
Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
powers1Gen Quadratic pack property lower upper sh a
a ((Quadratic pack property lower upper (Unchecked sh) a
  -> Quadratic pack property lower upper (Unchecked sh) a
  -> Quadratic pack property lower upper (Unchecked sh) a)
 -> Stream (Quadratic pack property lower upper sh a))
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$ (FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a
 -> FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a
 -> FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a)
-> UnpackedMatrix
     property
     lower
     upper
     Shape
     Small
     Small
     (Unchecked sh)
     (Unchecked sh)
     a
-> UnpackedMatrix
     property
     lower
     upper
     Shape
     Small
     Small
     (Unchecked sh)
     (Unchecked sh)
     a
-> UnpackedMatrix
     property
     lower
     upper
     Shape
     Small
     Small
     (Unchecked sh)
     (Unchecked sh)
     a
forall propertyA lowerA upperA propertyB lowerB upperB propertyC
       lowerC upperC measA vertA horizA heightA widthA a measB vertB
       horizB heightB widthB b measC vertC horizC heightC widthC c.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b
 -> FullArray measC vertC horizC heightC widthC c)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
-> UnpackedMatrix
     propertyC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.liftUnpacked2 FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a
-> FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a
-> FullArray Shape Small Small (Unchecked sh) (Unchecked sh) a
forall meas vert horiz height fuse width a.
(Measure meas, C vert, C horiz, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Full meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
FullBasic.multiply
      Power pack property lower upper Shape Small Small sh sh
Omni.PowerDiagonal ->
         case Quadratic pack property lower upper sh a
-> Omni pack property lower upper Shape Small Small sh sh
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape Quadratic pack property lower upper sh a
a of
            Omni.Banded Banded sub super Shape Small Small sh sh
_ ->
               (OmniArray pack property lower upper Shape Small Small sh sh a
 -> Quadratic pack property lower upper sh a)
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap OmniArray pack property lower upper Shape Small Small sh sh a
-> Quadratic pack property lower upper sh a
forall pack prop lower upper meas vert horiz height width a.
OmniArray pack prop lower upper meas vert horiz height width a
-> Matrix
     (Array pack prop) () () lower upper meas vert horiz height width a
ArrMatrix.Array (Stream
   (OmniArray pack property lower upper Shape Small Small sh sh a)
 -> Stream (Quadratic pack property lower upper sh a))
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$ OmniArray pack property lower upper Shape Small Small sh sh a
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
forall sh a.
(C sh, Floating a) =>
Vector sh a -> Stream (Vector sh a)
powers1Diagonal (OmniArray pack property lower upper Shape Small Small sh sh a
 -> Stream
      (OmniArray pack property lower upper Shape Small Small sh sh a))
-> OmniArray pack property lower upper Shape Small Small sh sh a
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> OmniArray pack property lower upper Shape Small Small sh sh a
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> OmniArray
     pack property lower upper meas vert horiz height width a
ArrMatrix.unwrap Quadratic pack property lower upper sh a
a
            Omni.BandedHermitian BandedHermitian offDiag sh
_ ->
               (OmniArray pack property lower upper Shape Small Small sh sh a
 -> Quadratic pack property lower upper sh a)
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap OmniArray pack property lower upper Shape Small Small sh sh a
-> Quadratic pack property lower upper sh a
forall pack prop lower upper meas vert horiz height width a.
OmniArray pack prop lower upper meas vert horiz height width a
-> Matrix
     (Array pack prop) () () lower upper meas vert horiz height width a
ArrMatrix.Array (Stream
   (OmniArray pack property lower upper Shape Small Small sh sh a)
 -> Stream (Quadratic pack property lower upper sh a))
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$ OmniArray pack property lower upper Shape Small Small sh sh a
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
forall sh a.
(C sh, Floating a) =>
Vector sh a -> Stream (Vector sh a)
powers1Diagonal (OmniArray pack property lower upper Shape Small Small sh sh a
 -> Stream
      (OmniArray pack property lower upper Shape Small Small sh sh a))
-> OmniArray pack property lower upper Shape Small Small sh sh a
-> Stream
     (OmniArray pack property lower upper Shape Small Small sh sh a)
forall a b. (a -> b) -> a -> b
$ Quadratic pack property lower upper sh a
-> OmniArray pack property lower upper Shape Small Small sh sh a
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> OmniArray
     pack property lower upper meas vert horiz height width a
ArrMatrix.unwrap Quadratic pack property lower upper sh a
a
            Omni.UnitBandedTriangular BandedSquare sub super sh
_ -> Quadratic pack property lower upper sh a
-> Stream (Quadratic pack property lower upper sh a)
forall a. a -> Stream a
Stream.repeat Quadratic pack property lower upper sh a
a
            Omni.Full Full Shape Small Small sh sh
_ ->
               (Vector sh a
 -> UnpackedMatrix property lower upper Shape Small Small sh sh a)
-> Stream (Vector sh a)
-> Stream
     (UnpackedMatrix property lower upper Shape Small Small sh sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (FullArray Shape Small Small sh sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh 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 Shape Small Small sh sh a
 -> UnpackedMatrix property lower upper Shape Small Small sh sh a)
-> (Vector sh a -> FullArray Shape Small Small sh sh a)
-> Vector sh a
-> UnpackedMatrix property lower upper Shape Small Small sh sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                     Order -> Vector sh a -> FullArray Shape Small Small sh sh a
forall sh a.
(C sh, Floating a) =>
Order -> Vector sh a -> Square sh a
SquareBasic.diagonalOrder (Quadratic pack property lower upper sh a -> Order
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Order
ArrMatrix.order Quadratic pack property lower upper sh a
a)) (Stream (Vector sh a)
 -> Stream
      (UnpackedMatrix property lower upper Shape Small Small sh sh a))
-> Stream (Vector sh a)
-> Stream
     (UnpackedMatrix property lower upper Shape Small Small sh sh a)
forall a b. (a -> b) -> a -> b
$
               Vector sh a -> Stream (Vector sh a)
forall sh a.
(C sh, Floating a) =>
Vector sh a -> Stream (Vector sh a)
powers1Diagonal (Vector sh a -> Stream (Vector sh a))
-> Vector sh a -> Stream (Vector sh a)
forall a b. (a -> b) -> a -> b
$
               FullArray Shape Small Small sh sh a -> Vector sh a
forall sh a. (C sh, Floating a) => Square sh a -> Vector sh a
SquareBasic.takeDiagonal (FullArray Shape Small Small sh sh a -> Vector sh a)
-> FullArray Shape Small Small sh sh a -> Vector sh a
forall a b. (a -> b) -> a -> b
$ UnpackedMatrix property lower upper Shape Small Small sh sh a
-> FullArray Shape Small Small sh sh a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
UnpackedMatrix property lower upper meas vert horiz height width a
-> FullArray meas vert horiz height width a
ArrMatrix.unpackedToVector Quadratic pack property lower upper sh a
UnpackedMatrix property lower upper Shape Small Small sh sh a
a

powers1Diagonal ::
   (Shape.C sh, Class.Floating a) => Vector sh a -> Stream (Vector sh a)
powers1Diagonal :: Vector sh a -> Stream (Vector sh a)
powers1Diagonal Vector sh a
a =
   let b :: Array (Unchecked sh) a
b = Vector sh a -> Array (Unchecked sh) a
forall sh a. Array sh a -> Array (Unchecked sh) a
VectorPriv.uncheck Vector sh a
a
   in (Array (Unchecked sh) a -> Vector sh a)
-> Stream (Array (Unchecked sh) a) -> Stream (Vector sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Array (Unchecked sh) a -> Vector sh a
forall sh a. Array (Unchecked sh) a -> Array sh a
VectorPriv.recheck (Stream (Array (Unchecked sh) a) -> Stream (Vector sh a))
-> Stream (Array (Unchecked sh) a) -> Stream (Vector sh a)
forall a b. (a -> b) -> a -> b
$ (Array (Unchecked sh) a -> Array (Unchecked sh) a)
-> Array (Unchecked sh) a -> Stream (Array (Unchecked sh) a)
forall a. (a -> a) -> a -> Stream a
Stream.iterate ((Array (Unchecked sh) a
 -> Array (Unchecked sh) a -> Array (Unchecked sh) a)
-> Array (Unchecked sh) a
-> Array (Unchecked sh) a
-> Array (Unchecked sh) a
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((a -> a -> a)
-> Array (Unchecked sh) a
-> Array (Unchecked sh) a
-> Array (Unchecked sh) a
forall sh a b c.
(C sh, Eq sh, Storable a, Storable b, Storable c) =>
(a -> b -> c) -> Array sh a -> Array sh b -> Array sh c
Array.zipWith a -> a -> a
forall a. Num a => a -> a -> a
(*)) Array (Unchecked sh) a
b) Array (Unchecked sh) a
b

powers1Gen ::
   (Layout.Packing pack, Omni.Property property) =>
   (MatrixShape.PowerStrip lower, MatrixShape.PowerStrip upper) =>
   (Shape.C sh, Class.Floating a) =>
   ArrMatrix.Quadratic pack property lower upper sh a ->
   (ArrMatrix.Quadratic pack property lower upper (Unchecked sh) a ->
    ArrMatrix.Quadratic pack property lower upper (Unchecked sh) a ->
    ArrMatrix.Quadratic pack property lower upper (Unchecked sh) a) ->
   Stream (ArrMatrix.Quadratic pack property lower upper sh a)
powers1Gen :: Quadratic pack property lower upper sh a
-> (Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a
    -> Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
powers1Gen Quadratic pack property lower upper sh a
a Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
mul =
   let b :: Quadratic pack property lower upper (Unchecked sh) a
b = (sh -> Unchecked sh)
-> Quadratic pack property lower upper sh a
-> Quadratic pack property lower upper (Unchecked sh) a
forall shA shB pack property lower upper a.
(C shA, C shB) =>
(shA -> shB)
-> Quadratic pack property lower upper shA a
-> Quadratic pack property lower upper shB a
OmniMatrix.mapSquareSize sh -> Unchecked sh
forall sh. sh -> Unchecked sh
Unchecked Quadratic pack property lower upper sh a
a
   in (Quadratic pack property lower upper (Unchecked sh) a
 -> Quadratic pack property lower upper sh a)
-> Stream (Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Unchecked sh -> sh)
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper sh a
forall shA shB pack property lower upper a.
(C shA, C shB) =>
(shA -> shB)
-> Quadratic pack property lower upper shA a
-> Quadratic pack property lower upper shB a
OmniMatrix.mapSquareSize Unchecked sh -> sh
forall sh. Unchecked sh -> sh
deconsUnchecked) (Stream (Quadratic pack property lower upper (Unchecked sh) a)
 -> Stream (Quadratic pack property lower upper sh a))
-> Stream (Quadratic pack property lower upper (Unchecked sh) a)
-> Stream (Quadratic pack property lower upper sh a)
forall a b. (a -> b) -> a -> b
$
      (Quadratic pack property lower upper (Unchecked sh) a
 -> Quadratic pack property lower upper (Unchecked sh) a)
-> Quadratic pack property lower upper (Unchecked sh) a
-> Stream (Quadratic pack property lower upper (Unchecked sh) a)
forall a. (a -> a) -> a -> Stream a
Stream.iterate ((Quadratic pack property lower upper (Unchecked sh) a
 -> Quadratic pack property lower upper (Unchecked sh) a
 -> Quadratic pack property lower upper (Unchecked sh) a)
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
forall a b c. (a -> b -> c) -> b -> a -> c
flip Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
-> Quadratic pack property lower upper (Unchecked sh) a
mul Quadratic pack property lower upper (Unchecked sh) a
b) Quadratic pack property lower upper (Unchecked sh) a
b


type family MultipliedPacking packA packB
type instance MultipliedPacking Packed packB = packB
type instance MultipliedPacking Unpacked packB = Unpacked

type family PackingByStrip lower upper meas pack
type instance PackingByStrip lower upper meas Unpacked = Unpacked
type instance PackingByStrip Filled upper Extent.Size pack = Unpacked
type instance PackingByStrip Empty upper Extent.Shape pack = pack
type instance PackingByStrip (Bands k) (Bands l) meas pack = pack
type instance PackingByStrip Filled Filled meas pack = Unpacked
type instance PackingByStrip
                     Filled (Bands (Unary.Succ l)) meas pack = Unpacked


{- |
This functions allows to multiply two matrices of arbitrary special features
and returns the most special matrix type possible (almost).
At the first glance, this is handy.
At the second glance, this has some problems.
First of all, we may refine the types in future
and then multiplication may return a different, more special type than before.
Second, if you write code with polymorphic matrix types,
then 'matrixMatrix' may leave you with constraints like
@ExtentPriv.Multiply vert vert ~ vert@.
That constraint is always fulfilled but the compiler cannot infer that.
Because of these problems
you may instead consider using specialised 'Basic.multiply' functions
from the various modules for production use.
Btw. 'MultiplyVector' and 'MultiplySquare'
are much less problematic,
because the input and output are always dense vectors or dense matrices.


We require e.g. both

> Extent.Multiply vertA vertB ~ vertC

and

> Extent.Multiply vertB vertA ~ vertC

This makes the combination commutative.
At first glance this looks counterintuitive,
but this allows the type checker to infer
that "shape A" times "square" is "shape A".
-}
matrixMatrix ::
   (Layout.Packing packA, Omni.Property propertyA) =>
   (Layout.Packing packB, Omni.Property propertyB) =>
   (Layout.Packing packC, Omni.Property propertyC) =>
   (Omni.Strip lowerA, Omni.Strip upperA) =>
   (Omni.Strip lowerB, Omni.Strip upperB) =>
   (Omni.Strip lowerC, Omni.Strip upperC) =>
   (MultipliedPacking packA packB ~ pack) =>
   (MultipliedPacking packB packA ~ pack) =>
   (Omni.MultipliedStrip lowerA lowerB ~ lowerC) =>
   (Omni.MultipliedStrip lowerB lowerA ~ lowerC) =>
   (Omni.MultipliedStrip upperA upperB ~ upperC) =>
   (Omni.MultipliedStrip upperB upperA ~ upperC) =>
   (Omni.MultipliedBands lowerA lowerB ~ lowerC) =>
   (Omni.MultipliedBands lowerB lowerA ~ lowerC) =>
   (Omni.MultipliedBands upperA upperB ~ upperC) =>
   (Omni.MultipliedBands upperB upperA ~ upperC) =>
   (Omni.MultipliedProperty propertyA propertyB ~ propertyAB) =>
   (Omni.MultipliedProperty propertyB propertyA ~ propertyAB) =>
   (Omni.UnitIfTriangular lowerC upperC ~ diag) =>
   (Omni.UnitIfTriangular upperC lowerC ~ diag) =>
   (Omni.MergeUnit propertyAB diag ~ propertyC) =>
   (Omni.MergeUnit diag propertyAB ~ propertyC) =>
   (PackingByStrip lowerC upperC measC pack ~ packC) =>
   (PackingByStrip upperC lowerC measC pack ~ packC) =>
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA) =>
   (Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   (ExtentPriv.MultiplyMeasure measA measB ~ measC) =>
   (ExtentPriv.MultiplyMeasure measB measA ~ measC) =>
   (ExtentPriv.Multiply vertA  vertB  ~ vertC)  =>
   (ExtentPriv.Multiply vertB  vertA  ~ vertC)  =>
   (ExtentPriv.Multiply horizA horizB ~ horizC) =>
   (ExtentPriv.Multiply horizB horizA ~ horizC) =>
   (Shape.C height, Shape.C fuse, Eq fuse, Shape.C width, Class.Floating a) =>
   ArrayMatrix packA propertyA lowerA upperA measA vertA horizA height fuse a ->
   ArrayMatrix packB propertyB lowerB upperB measB vertB horizB fuse width a ->
   ArrayMatrix packC propertyC lowerC upperC measC vertC horizC height width a
matrixMatrix :: ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
matrixMatrix ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b =
   case (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Omni
     packA propertyA lowerA upperA measA vertA horizA height fuse
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a, ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Omni packB propertyB lowerB upperB measB vertB horizB fuse width
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b) of
      (shapeA :: Omni packA propertyA lowerA upperA measA vertA horizA height fuse
shapeA@(Omni.Full Full measA vertA horizA height fuse
_), shapeB :: Omni packB propertyB lowerB upperB measB vertB horizB fuse width
shapeB@(Omni.Full Full measB vertB horizB fuse width
_)) ->
         case Omni packA propertyA lowerA upperA measA vertA horizA height fuse
-> Factor
     packA propertyA lowerA upperA measA vertA horizA height fuse
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton Omni packA propertyA lowerA upperA measA vertA horizA height fuse
shapeA of
            Factor packA propertyA lowerA upperA measA vertA horizA height fuse
FactorUpperTriangular -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
            Factor packA propertyA lowerA upperA measA vertA horizA height fuse
FactorLowerTriangular -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
            Factor packA propertyA lowerA upperA measA vertA horizA height fuse
FactorSymmetric -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
            Factor packA propertyA lowerA upperA measA vertA horizA height fuse
FactorHermitian -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
            Factor packA propertyA lowerA upperA measA vertA horizA height fuse
_ ->
               case Omni packB propertyB lowerB upperB measB vertB horizB fuse width
-> Factor
     packB propertyB lowerB upperB measB vertB horizB fuse width
forall pack property lower upper meas vert horiz height width.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz) =>
Omni pack property lower upper meas vert horiz height width
-> Factor pack property lower upper meas vert horiz height width
factorSingleton Omni packB propertyB lowerB upperB measB vertB horizB fuse width
shapeB of
                  Factor packB propertyB lowerB upperB measB vertB horizB fuse width
FactorUpperTriangular -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  Factor packB propertyB lowerB upperB measB vertB horizB fuse width
FactorLowerTriangular -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  Factor packB propertyB lowerB upperB measB vertB horizB fuse width
FactorSymmetric -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  Factor packB propertyB lowerB upperB measB vertB horizB fuse width
FactorHermitian -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  Factor packB propertyB lowerB upperB measB vertB horizB fuse width
_ -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyB lowerB upperB propertyC
       lowerC upperC measA vertA horizA measB vertB horizB height fuse
       width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure measA, C vertA, C horizA,
 Measure measB, C vertB, C horizB, C height, C fuse, Eq fuse,
 C width, Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.UpperTriangular UpperTriangular fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.LowerTriangular LowerTriangular fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.Symmetric Symmetric fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.Hermitian Hermitian fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.Banded Banded sub super measB vertB horizB fuse width
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB fuse width a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.UnitBandedTriangular BandedSquare sub super fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Full Full measA vertA horizA height fuse
_, Omni.BandedHermitian BandedHermitian offDiag fuse
_) -> Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.UpperTriangular UpperTriangular height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
      (Omni.UpperTriangular UpperTriangular height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         case (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> DiagSingleton propertyA
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a, ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> DiagSingleton propertyB
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b) of
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Unit, DiagSingleton propertyB
Omni.Unit) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Unit, DiagSingleton propertyB
Omni.Arbitrary) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Arbitrary, DiagSingleton propertyB
_) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
-> TriangularP Packed Upper height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
      (Omni.UpperTriangular UpperTriangular height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.UpperTriangular UpperTriangular height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.UpperTriangular UpperTriangular height
_, Omni.Hermitian Hermitian fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.UpperTriangular UpperTriangular height
_, Omni.Banded Banded sub super measB vertB horizB fuse width
_) ->
         case ArrayMatrix
  packB propertyB (Bands sub) upperB measB vertB horizB fuse width a
-> HeadSingleton sub
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB propertyB (Bands sub) upperB measB vertB horizB fuse width a
b of
            HeadSingleton sub
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded (Succ n1) super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded (Succ n1) super measB vertB horizB fuse width a
b
            HeadSingleton sub
Unary.Zero ->
               case ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Extent measB vertB horizB fuse width
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b of
                  ExtentPriv.Square fuse
_ ->
                     Unpacked Arbitrary Filled Filled Shape Small Small height width a
-> Upper width a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled Shape Small Small height width a
 -> Upper width a)
-> Unpacked
     Arbitrary Filled Filled Shape Small Small height width a
-> Upper width a
forall a b. (a -> b) -> a -> b
$ Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall pack meas vert horiz height width a.
Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
-> Id
     (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded Zero super measB vertB horizB fuse width a
-> Unpacked
     Arbitrary
     Filled
     Filled
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded Zero super measB vertB horizB fuse width a
b
                  ExtentPriv.Separate fuse
_ width
_ ->
                     Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded Zero super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded Zero super measB vertB horizB fuse width a
b
      (Omni.UpperTriangular UpperTriangular height
_, Omni.BandedHermitian BandedHermitian offDiag fuse
_) ->
         case ArrayMatrix
  packB
  propertyB
  (Bands offDiag)
  upperB
  measB
  vertB
  horizB
  fuse
  width
  a
-> HeadSingleton offDiag
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB
  propertyB
  (Bands offDiag)
  upperB
  measB
  vertB
  horizB
  fuse
  width
  a
b of
            HeadSingleton offDiag
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
            HeadSingleton offDiag
Unary.Zero ->
               (PlainArray
   Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC 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 PlainArray
  Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> PlainArray
     packC propertyC lowerC upperC measC vertC horizC height width a
forall meas vert height width a.
(Measure meas, C vert, C height, C width, Floating a) =>
Full meas vert Small height width a -> Upper width a
TriangularBasic.takeUpper (Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
 -> ArrayMatrix
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a b. (a -> b) -> a -> b
$
               Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.UpperTriangular UpperTriangular height
_, Omni.UnitBandedTriangular BandedSquare sub super fuse
_) ->
         case ArrayMatrix
  packB propertyB (Bands sub) upperB measB vertB horizB fuse width a
-> HeadSingleton sub
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB propertyB (Bands sub) upperB measB vertB horizB fuse width a
b of
            HeadSingleton sub
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall packB propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packB, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, C width, Eq width, Floating a) =>
Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
            HeadSingleton sub
Unary.Zero ->
               case ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> DiagSingleton propertyA
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a of
                  DiagSingleton propertyA
Omni.Unit ->
                     (PlainArray
   Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC 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 PlainArray
  Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
-> PlainArray
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a. a -> a
id (ArrayMatrix
   Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
 -> ArrayMatrix
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
 -> ArrayMatrix
      Packed Arbitrary Empty Filled Shape Small Small fuse fuse a)
-> Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  DiagSingleton propertyA
Omni.Arbitrary ->
                     Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
 -> ArrayMatrix
      Packed Arbitrary Empty Filled Shape Small Small fuse fuse a)
-> Unpacked Arbitrary Filled Filled measA vertA Small height fuse a
-> ArrayMatrix
     Packed Arbitrary Empty Filled Shape Small Small fuse fuse a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.LowerTriangular LowerTriangular height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
      (Omni.LowerTriangular LowerTriangular height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         case (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> DiagSingleton propertyA
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a, ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> DiagSingleton propertyB
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b) of
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Unit, DiagSingleton propertyB
Omni.Unit) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Unit, DiagSingleton propertyB
Omni.Arbitrary) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
            (diagA :: DiagSingleton propertyA
diagA@DiagSingleton propertyA
Omni.Arbitrary, DiagSingleton propertyB
_) ->
               (PlainArray
   packA propertyA lowerA upperA measA vertA horizA height fuse a
 -> PlainArray
      packB propertyB lowerB upperB measB vertB horizB fuse width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> ArrayMatrix
     packA propertyA lowerA upperA measA vertA horizA height fuse a
-> ArrayMatrix
     packB propertyB lowerB upperB measB vertB horizB fuse width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 (DiagSingleton propertyA
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
-> TriangularP Packed Lower height a
forall pack uplo diag sh a.
(Packing pack, UpLo uplo, TriDiag diag, C sh, Eq sh, Floating a) =>
DiagSingleton diag
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
-> TriangularP pack uplo sh a
TriangularBasic.multiply DiagSingleton propertyA
diagA) ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b
      (Omni.LowerTriangular LowerTriangular height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.LowerTriangular LowerTriangular height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.LowerTriangular LowerTriangular height
_, Omni.Hermitian Hermitian fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.LowerTriangular LowerTriangular height
_, Omni.Banded Banded sub super measB vertB horizB fuse width
_) ->
         case ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands super)
  measB
  vertB
  horizB
  fuse
  width
  a
-> HeadSingleton super
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands super)
  measB
  vertB
  horizB
  fuse
  width
  a
b of
            HeadSingleton super
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded sub (Succ n1) measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub (Succ n1) measB vertB horizB fuse width a
b
            HeadSingleton super
Unary.Zero ->
               case ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Extent measB vertB horizB fuse width
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b of
                  ExtentPriv.Square fuse
_ ->
                     Unpacked Arbitrary Filled Filled Shape Small Small height width a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled Shape Small Small height width a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled Shape Small Small height width a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall pack meas vert horiz height width a.
Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
-> Id
     (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded sub Zero measB vertB horizB fuse width a
-> Unpacked
     Arbitrary
     Filled
     Filled
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub Zero measB vertB horizB fuse width a
b
                  ExtentPriv.Separate fuse
_ width
_ ->
                     Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Banded sub Zero measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub Zero measB vertB horizB fuse width a
b
      (Omni.LowerTriangular LowerTriangular height
_, Omni.BandedHermitian BandedHermitian offDiag fuse
_) ->
         case ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands offDiag)
  measB
  vertB
  horizB
  fuse
  width
  a
-> HeadSingleton offDiag
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands offDiag)
  measB
  vertB
  horizB
  fuse
  width
  a
b of
            HeadSingleton offDiag
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
 -> Unpacked
      propertyC lowerC upperC measA vertA horizA height fuse a)
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
            HeadSingleton offDiag
Unary.Zero ->
               Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.LowerTriangular LowerTriangular height
_, Omni.UnitBandedTriangular BandedSquare sub super fuse
_) ->
         case ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands super)
  measB
  vertB
  horizB
  fuse
  width
  a
-> HeadSingleton super
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packB
  propertyB
  lowerB
  (Bands super)
  measB
  vertB
  horizB
  fuse
  width
  a
b of
            HeadSingleton super
Unary.Succ -> Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
 -> Unpacked
      propertyC lowerC upperC measA vertA horizA height fuse a)
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
-> Unpacked
     propertyC lowerC upperC measA vertA horizA height fuse a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
            HeadSingleton super
Unary.Zero ->
               case ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> DiagSingleton propertyA
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a of
                  DiagSingleton propertyA
Omni.Unit ->
                     (PlainArray
   Packed Arbitrary Filled Empty Shape Small Small height height a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Lower height a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC 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 PlainArray
  Packed Arbitrary Filled Empty Shape Small Small height height a
-> PlainArray
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a. a -> a
id (Lower height a
 -> ArrayMatrix
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Lower height a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
                  DiagSingleton propertyA
Omni.Arbitrary ->
                     Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measA Small horizA height fuse a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measA Small horizA height fuse a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Unpacked Arbitrary Filled Filled measA vertA horizA height fuse a
-> Quadratic packB propertyB lowerB upperB fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     Arbitrary Filled Filled measA vertA horizA height fuse a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB fuse a
b
      (Omni.Symmetric Symmetric height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
unflex ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.Symmetric Symmetric height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Symmetric Symmetric height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Symmetric Symmetric height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.Symmetric Symmetric height
_, Omni.Hermitian Hermitian fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Symmetric Symmetric height
_, Omni.Banded Banded sub super measB vertB horizB fuse width
_) ->
         Full Shape Small Small height height a
-> Banded sub super measB vertB horizB height width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure Shape measB)
     (Multiply Small vertB)
     (Multiply Small horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB height width a
b
      (Omni.Symmetric Symmetric height
_, Omni.BandedHermitian BandedHermitian offDiag fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Symmetric Symmetric height
_, Omni.UnitBandedTriangular BandedSquare sub super fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (SymmetricP packA height a -> Full Shape Small Small height height a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
SymmetricP packA height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Hermitian Hermitian height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
unflex ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.Hermitian Hermitian height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (FlexHermitianP packA neg zero pos height a
-> Full Shape Small Small height height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitianP packA neg zero pos height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Hermitian Hermitian height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (FlexHermitianP packA neg zero pos height a
-> Full Shape Small Small height height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitianP packA neg zero pos height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Hermitian Hermitian height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.Hermitian Hermitian height
_, Omni.Hermitian Hermitian fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.Hermitian Hermitian height
_, Omni.Banded Banded sub super measB vertB horizB fuse width
_) ->
         Full Shape Small Small height height a
-> Banded sub super measB vertB horizB height width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure Shape measB)
     (Multiply Small vertB)
     (Multiply Small horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded (FlexHermitianP packA neg zero pos height a
-> Full Shape Small Small height height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitianP packA neg zero pos height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB height width a
b
      (Omni.Hermitian Hermitian height
_, Omni.BandedHermitian BandedHermitian offDiag fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (FlexHermitianP packA neg zero pos height a
-> Full Shape Small Small height height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitianP packA neg zero pos height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Hermitian Hermitian height
_, Omni.UnitBandedTriangular BandedSquare sub super fuse
_) ->
         Full Shape Small Small height height a
-> Quadratic packB propertyB lowerB upperB height a
-> Full Shape Small Small height height a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (FlexHermitianP packA neg zero pos height a
-> Full Shape Small Small height height a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitianP packA neg zero pos height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Quadratic packB propertyB lowerB upperB height a
b
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_, Omni.Full Full measB vertB horizB fuse width
_) -> Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_, Omni.Symmetric Symmetric fuse
_) ->
         Banded sub super measA vertA horizA height fuse a
-> Square fuse a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA Shape)
     (Multiply vertA Small)
     (Multiply horizA Small)
     height
     fuse
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_, Omni.Hermitian Hermitian fuse
_) ->
         Banded sub super measA vertA horizA height fuse a
-> Square fuse a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA Shape)
     (Multiply vertA Small)
     (Multiply horizA Small)
     height
     fuse
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         case ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands super)
  measA
  vertA
  horizA
  height
  fuse
  a
-> HeadSingleton super
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands super)
  measA
  vertA
  horizA
  height
  fuse
  a
a of
            HeadSingleton super
Unary.Succ -> Banded sub (Succ n1) measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub (Succ n1) measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton super
Unary.Zero ->
               case ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Extent measA vertA horizA height fuse
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a of
                  ExtentPriv.Square height
_ ->
                     Unpacked Arbitrary Filled Filled Shape Small Small height width a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled Shape Small Small height width a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled Shape Small Small height width a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall pack meas vert horiz height width a.
Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
-> Id
     (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall a b. (a -> b) -> a -> b
$
                     Banded sub Zero measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     Arbitrary
     Filled
     Filled
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub Zero measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
                  ExtentPriv.Separate height
_ fuse
_ ->
                     Banded sub Zero measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub Zero measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         case ArrayMatrix
  packA propertyA (Bands sub) upperA measA vertA horizA height fuse a
-> HeadSingleton sub
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA propertyA (Bands sub) upperA measA vertA horizA height fuse a
a of
            HeadSingleton sub
Unary.Succ -> Banded (Succ n1) super measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded (Succ n1) super measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton sub
Unary.Zero ->
               case ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
-> Extent measA vertA horizA height fuse
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
a of
                  ExtentPriv.Square height
_ ->
                     Unpacked Arbitrary Filled Filled Shape Small Small height width a
-> Upper width a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled Shape Small Small height width a
 -> Upper width a)
-> Unpacked
     Arbitrary Filled Filled Shape Small Small height width a
-> Upper width a
forall a b. (a -> b) -> a -> b
$ Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall pack meas vert horiz height width a.
Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary Id
  (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
-> Id
     (Unpacked Arbitrary Filled Filled Shape Small Small height width a)
forall a b. (a -> b) -> a -> b
$
                     Banded Zero super measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     Arbitrary
     Filled
     Filled
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded Zero super measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
                  ExtentPriv.Separate height
_ fuse
_ ->
                     Banded Zero super measA vertA horizA height fuse a
-> Full measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyB lowerB upperB propertyC lowerC upperC sub super
       measA vertA horizA measB vertB horizB height fuse width a.
(Property propertyB, Strip lowerB, Strip upperB,
 Property propertyC, Strip lowerC, Strip upperC, Natural sub,
 Natural super, Measure measA, C vertA, C horizA, Measure measB,
 C vertB, C horizB, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded Zero super measA vertA horizA height fuse a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
      (Omni.UnitBandedTriangular BandedSquare sub super height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         case ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands super)
  measA
  vertA
  horizA
  height
  fuse
  a
-> HeadSingleton super
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands super)
  measA
  vertA
  horizA
  height
  fuse
  a
a of
            HeadSingleton super
Unary.Succ -> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Full measB vertB horizB height width a
 -> Unpacked
      propertyC lowerC upperC measB vertB horizB height width a)
-> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton super
Unary.Zero ->
               case ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> DiagSingleton propertyB
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b of
                  DiagSingleton propertyB
Omni.Unit ->
                     (PlainArray
   Packed Arbitrary Filled Empty Shape Small Small height height a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Lower height a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC 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 PlainArray
  Packed Arbitrary Filled Empty Shape Small Small height height a
-> PlainArray
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a. a -> a
id (Lower height a
 -> ArrayMatrix
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Lower height a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measB Small horizB height width a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
                  DiagSingleton propertyB
Omni.Arbitrary ->
                     Unpacked Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measB Small horizB height width a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         case ArrayMatrix
  packA propertyA (Bands sub) upperA measA vertA horizA height fuse a
-> HeadSingleton sub
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA propertyA (Bands sub) upperA measA vertA horizA height fuse a
a of
            HeadSingleton sub
Unary.Succ -> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Full measB vertB horizB height width a
 -> Unpacked
      propertyC lowerC upperC measB vertB horizB height width a)
-> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton sub
Unary.Zero ->
               case ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> DiagSingleton propertyB
forall diag pack lower upper meas vert horiz height width a.
TriDiag diag =>
ArrayMatrix pack diag lower upper meas vert horiz height width a
-> DiagSingleton diag
diagTag ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b of
                  DiagSingleton propertyB
Omni.Unit ->
                     (PlainArray
   Packed Arbitrary Empty Filled Shape Small Small width width a
 -> PlainArray
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Upper width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC 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 PlainArray
  Packed Arbitrary Empty Filled Shape Small Small width width a
-> PlainArray
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a. a -> a
id (Upper width a
 -> ArrayMatrix
      packC propertyC lowerC upperC measC vertC horizC height width a)
-> Upper width a
-> ArrayMatrix
     packC propertyC lowerC upperC measC vertC horizC height width a
forall a b. (a -> b) -> a -> b
$
                     Unpacked Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled measB vertB Small height width a
 -> Upper width a)
-> Unpacked
     Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
                  DiagSingleton propertyB
Omni.Arbitrary ->
                     Unpacked Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled measB vertB Small height width a
 -> Upper width a)
-> Unpacked
     Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
_, Omni.Hermitian Hermitian fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Full Shape Small Small height fuse a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.BandedHermitian BandedHermitian offDiag height
_, Omni.Full Full measB vertB horizB fuse width
_) -> Quadratic packA propertyA lowerA upperA height a
-> Unpacked
     propertyB lowerB upperB measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Unpacked propertyB lowerB upperB measB vertB horizB height width a
b
      (Omni.BandedHermitian BandedHermitian offDiag height
_, Omni.LowerTriangular LowerTriangular fuse
_) ->
         case ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands offDiag)
  measA
  vertA
  horizA
  height
  fuse
  a
-> HeadSingleton offDiag
forall super pack property lower meas vert horiz height width a.
Natural super =>
ArrayMatrix
  pack property lower (Bands super) meas vert horiz height width a
-> HeadSingleton super
ArrMatrix.superBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA
  propertyA
  lowerA
  (Bands offDiag)
  measA
  vertA
  horizA
  height
  fuse
  a
a of
            HeadSingleton offDiag
Unary.Succ -> Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton offDiag
Unary.Zero ->
               Unpacked Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall property upper meas horiz height width a.
(Property property, Strip upper, Measure meas, C horiz, C height,
 C width, Floating a) =>
Unpacked property Filled upper meas Small horiz height width a
-> Lower height a
Triangular.takeLower (Unpacked Arbitrary Filled Filled measB Small horizB height width a
 -> Lower height a)
-> Unpacked
     Arbitrary Filled Filled measB Small horizB height width a
-> Lower height a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.BandedHermitian BandedHermitian offDiag height
_, Omni.UpperTriangular UpperTriangular fuse
_) ->
         case ArrayMatrix
  packA
  propertyA
  (Bands offDiag)
  upperA
  measA
  vertA
  horizA
  height
  fuse
  a
-> HeadSingleton offDiag
forall sub pack property upper meas vert horiz height width a.
Natural sub =>
ArrayMatrix
  pack property (Bands sub) upper meas vert horiz height width a
-> HeadSingleton sub
ArrMatrix.subBandsSingleton ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packA
  propertyA
  (Bands offDiag)
  upperA
  measA
  vertA
  horizA
  height
  fuse
  a
a of
            HeadSingleton offDiag
Unary.Succ -> Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Unpacked
     propertyC lowerC upperC measB vertB horizB height width a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
            HeadSingleton offDiag
Unary.Zero ->
               Unpacked Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall property lower meas vert height width a.
(Property property, Strip lower, Measure meas, C vert, C height,
 C width, Floating a) =>
Unpacked property lower Filled meas vert Small height width a
-> Upper width a
Triangular.takeUpper (Unpacked Arbitrary Filled Filled measB vertB Small height width a
 -> Upper width a)
-> Unpacked
     Arbitrary Filled Filled measB vertB Small height width a
-> Upper width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> Full measB vertB horizB height width a
-> Full measB vertB horizB height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
-> Full measB vertB horizB fuse width a
forall meas vert horiz height width a pack property lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
OmniMatrix.toFull ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
b)
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_shA, Omni.Banded Banded sub super measB vertB horizB fuse width
_shB) -> Banded sub super measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Banded
     (sub :+: sub)
     (super :+: super)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB fuse width a
b
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_shA, Omni.UnitBandedTriangular BandedSquare sub super fuse
_shB) ->
         Banded sub super measA vertA horizA height fuse a
-> Banded sub super Shape Small Small fuse fuse a
-> Banded
     (sub :+: sub)
     (super :+: super)
     (MultiplyMeasure measA Shape)
     (Multiply vertA Small)
     (Multiply horizA Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a (UnitTriangular sub super fuse a
-> Banded sub super Shape Small Small fuse fuse a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitTriangular sub super fuse a
b)
      (Omni.Banded Banded sub super measA vertA horizA height fuse
_shA, Omni.BandedHermitian BandedHermitian offDiag fuse
_shB) ->
         Banded sub super measA vertA horizA height fuse a
-> Banded offDiag offDiag Shape Small Small fuse fuse a
-> Banded
     (sub :+: offDiag)
     (super :+: offDiag)
     (MultiplyMeasure measA Shape)
     (Multiply vertA Small)
     (Multiply horizA Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Banded sub super measA vertA horizA height fuse a
a (FlexHermitian neg zero pos offDiag fuse a
-> Banded offDiag offDiag Shape Small Small fuse fuse a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitian neg zero pos offDiag fuse a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
_shA, Omni.Banded Banded sub super measB vertB horizB fuse width
_shB) ->
         Banded sub super Shape Small Small height height a
-> Banded sub super measB vertB horizB height width a
-> Banded
     (sub :+: sub)
     (super :+: super)
     (MultiplyMeasure Shape measB)
     (Multiply Small vertB)
     (Multiply Small horizB)
     height
     width
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (UnitTriangular sub super height a
-> Banded sub super Shape Small Small height height a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitTriangular sub super height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB height width a
b
      (Omni.UnitBandedTriangular BandedSquare sub super height
_shA, Omni.BandedHermitian BandedHermitian offDiag fuse
_shB) ->
         Banded sub super Shape Small Small height height a
-> Banded offDiag offDiag Shape Small Small height fuse a
-> Banded
     (sub :+: offDiag)
     (super :+: offDiag)
     (MultiplyMeasure Shape Shape)
     (Multiply Small Small)
     (Multiply Small Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (UnitTriangular sub super height a
-> Banded sub super Shape Small Small height height a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitTriangular sub super height a
a) (FlexHermitian neg zero pos offDiag fuse a
-> Square offDiag offDiag fuse a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitian neg zero pos offDiag fuse a
b)
      (Omni.UnitBandedTriangular BandedSquare sub super height
shA, Omni.UnitBandedTriangular BandedSquare sub super fuse
shB) ->
         case (BandedSquare sub super height
-> BandedTriangularSingleton sub super
forall sub super meas vert horiz height width.
BandedTriangular sub super =>
Banded sub super meas vert horiz height width
-> BandedTriangularSingleton sub super
Omni.bandedTriangularSingleton BandedSquare sub super height
shA,
               BandedSquare sub super fuse -> BandedTriangularSingleton sub super
forall sub super meas vert horiz height width.
BandedTriangular sub super =>
Banded sub super meas vert horiz height width
-> BandedTriangularSingleton sub super
Omni.bandedTriangularSingleton BandedSquare sub super fuse
shB) of
            (BandedTriangularSingleton sub super
Omni.BandedDiagonal, BandedTriangularSingleton sub super
Omni.BandedDiagonal) -> ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packC propertyC lowerC upperC measC vertC horizC height width a
b
            (BandedTriangularSingleton sub super
Omni.BandedDiagonal, BandedTriangularSingleton sub super
Omni.BandedUpper) -> ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packC propertyC lowerC upperC measC vertC horizC height width a
b
            (BandedTriangularSingleton sub super
Omni.BandedDiagonal, BandedTriangularSingleton sub super
Omni.BandedLower) -> ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
ArrayMatrix
  packC propertyC lowerC upperC measC vertC horizC height width a
b
            (BandedTriangularSingleton sub super
Omni.BandedUpper, BandedTriangularSingleton sub super
Omni.BandedDiagonal) -> ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packC propertyC lowerC upperC measC vertC horizC height width a
a
            (BandedTriangularSingleton sub super
Omni.BandedLower, BandedTriangularSingleton sub super
Omni.BandedDiagonal) -> ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
ArrayMatrix
  packC propertyC lowerC upperC measC vertC horizC height width a
a
            (BandedTriangularSingleton sub super
Omni.BandedUpper, BandedTriangularSingleton sub super
Omni.BandedLower) ->
               Banded Zero (Succ offDiag) Shape Small Small height height a
-> Banded (Succ offDiag) Zero Shape Small Small height fuse a
-> Banded
     (Zero :+: Succ offDiag)
     (Succ offDiag :+: Zero)
     (MultiplyMeasure Shape Shape)
     (Multiply Small Small)
     (Multiply Small Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (UnitTriangular Zero (Succ offDiag) height a
-> Banded Zero (Succ offDiag) Shape Small Small height height a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitTriangular Zero (Succ offDiag) height a
a) (UnitTriangular (Succ offDiag) Zero fuse a
-> Square (Succ offDiag) Zero fuse a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitTriangular (Succ offDiag) Zero fuse a
b)
            (BandedTriangularSingleton sub super
Omni.BandedLower, BandedTriangularSingleton sub super
Omni.BandedUpper) ->
               Banded (Succ offDiag) Zero Shape Small Small height height a
-> Banded Zero (Succ offDiag) Shape Small Small height fuse a
-> Banded
     (Succ offDiag :+: Zero)
     (Zero :+: Succ offDiag)
     (MultiplyMeasure Shape Shape)
     (Multiply Small Small)
     (Multiply Small Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (UnitTriangular (Succ offDiag) Zero height a
-> Banded (Succ offDiag) Zero Shape Small Small height height a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitTriangular (Succ offDiag) Zero height a
a) (UnitTriangular Zero (Succ offDiag) fuse a
-> Square Zero (Succ offDiag) fuse a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitTriangular Zero (Succ offDiag) fuse a
b)
            (BandedTriangularSingleton sub super
Omni.BandedUpper, BandedTriangularSingleton sub super
Omni.BandedUpper) -> UnitUpper (Succ offDiag) height a
-> UnitUpper (Succ offDiag) height a
-> UnitUpper (Succ (super :+: offDiag)) height a
forall superA superB superC size a.
(Natural superA, Natural superB, (Succ superA :+: superB) ~ superC,
 C size, Eq size, Floating a) =>
UnitUpper (Succ superA) size a
-> UnitUpper (Succ superB) size a -> UnitUpper (Succ superC) size a
bandedUpper ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitUpper (Succ offDiag) height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitUpper (Succ offDiag) height a
b
            (BandedTriangularSingleton sub super
Omni.BandedLower, BandedTriangularSingleton sub super
Omni.BandedLower) -> UnitLower (Succ offDiag) height a
-> UnitLower (Succ offDiag) height a
-> UnitLower (Succ (sub :+: offDiag)) height a
forall subA subB subC size a.
(Natural subA, Natural subB, (Succ subA :+: subB) ~ subC, C size,
 Eq size, Floating a) =>
UnitLower (Succ subA) size a
-> UnitLower (Succ subB) size a -> UnitLower (Succ subC) size a
bandedLower ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
UnitLower (Succ offDiag) height a
a ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitLower (Succ offDiag) height a
b
      (Omni.BandedHermitian BandedHermitian offDiag height
_, Omni.Symmetric Symmetric fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Unpacked propertyC lowerC upperC Shape Small Small height fuse a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (SymmetricP packB fuse a -> Square fuse a
forall pack sh a.
(Packing pack, C sh, Floating a) =>
SymmetricP pack sh a -> Square sh a
Symmetric.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
SymmetricP packB fuse a
b)
      (Omni.BandedHermitian BandedHermitian offDiag height
_, Omni.Hermitian Hermitian fuse
_) ->
         Quadratic packA propertyA lowerA upperA height a
-> Full Shape Small Small height fuse a
-> Unpacked propertyC lowerC upperC Shape Small Small height fuse a
forall packA propertyA lowerA upperA propertyB lowerB upperB
       propertyC lowerC upperC meas vert horiz height width a.
(Packing packA, Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC, Measure meas, C vert, C horiz,
 C height, Eq height, C width, Floating a) =>
Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
Quadratic packA propertyA lowerA upperA height a
a (FlexHermitianP packB neg zero pos fuse a -> Square fuse a
forall pack neg zero pos sh a.
(Packing pack, C neg, C zero, C pos, C sh, Floating a) =>
FlexHermitianP pack neg zero pos sh a -> Square sh a
Hermitian.toSquare ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitianP packB neg zero pos fuse a
b)
      (Omni.BandedHermitian BandedHermitian offDiag height
_shA, Omni.Banded Banded sub super measB vertB horizB fuse width
_shB) ->
         Banded offDiag offDiag Shape Small Small height height a
-> Banded sub super measB vertB horizB height width a
-> Banded
     (offDiag :+: sub)
     (offDiag :+: super)
     (MultiplyMeasure Shape measB)
     (Multiply Small vertB)
     (Multiply Small horizB)
     height
     width
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (FlexHermitian neg zero pos offDiag height a
-> Banded offDiag offDiag Shape Small Small height height a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitian neg zero pos offDiag height a
a) ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
Banded sub super measB vertB horizB height width a
b
      (Omni.BandedHermitian BandedHermitian offDiag height
_shA, Omni.UnitBandedTriangular BandedSquare sub super fuse
_shB) ->
         Banded offDiag offDiag Shape Small Small height height a
-> Banded sub super Shape Small Small height fuse a
-> Banded
     (offDiag :+: sub)
     (offDiag :+: super)
     (MultiplyMeasure Shape Shape)
     (Multiply Small Small)
     (Multiply Small Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (FlexHermitian neg zero pos offDiag height a
-> Banded offDiag offDiag Shape Small Small height height a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitian neg zero pos offDiag height a
a) (UnitTriangular sub super fuse a -> Square sub super fuse a
forall sub super sh a.
UnitTriangular sub super sh a -> Square sub super sh a
Banded.noUnit ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
UnitTriangular sub super fuse a
b)
      (Omni.BandedHermitian BandedHermitian offDiag height
_shA, Omni.BandedHermitian BandedHermitian offDiag fuse
_shB) ->
         Banded offDiag offDiag Shape Small Small height height a
-> Banded offDiag offDiag Shape Small Small height fuse a
-> Banded
     (offDiag :+: offDiag)
     (offDiag :+: offDiag)
     (MultiplyMeasure Shape Shape)
     (Multiply Small Small)
     (Multiply Small Small)
     height
     fuse
     a
forall subA superA subB superB measA measB vertA horizA vertB
       horizB height fuse width a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 Measure measA, Measure measB, C vertA, C horizA, C vertB, C horizB,
 C height, C fuse, Eq fuse, C width, Floating a) =>
Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded (FlexHermitian neg zero pos offDiag height a
-> Banded offDiag offDiag Shape Small Small height height a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packA propertyA lowerA upperA measA vertA horizA height fuse a
FlexHermitian neg zero pos offDiag height a
a) (FlexHermitian neg zero pos offDiag fuse a
-> Square offDiag offDiag fuse a
forall neg zero pos offDiag size a.
(C neg, C zero, C pos, Natural offDiag, C size, Floating a) =>
FlexHermitian neg zero pos offDiag size a
-> Square offDiag offDiag size a
BandedHermitian.toBanded ArrayMatrix
  packB propertyB lowerB upperB measB vertB horizB fuse width a
FlexHermitian neg zero pos offDiag fuse a
b)

asArbitrary ::
   Id (ArrayMatrix pack
         Omni.Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary :: Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
asArbitrary = Id
  (ArrayMatrix
     pack Arbitrary Filled Filled meas vert horiz height width a)
forall a. a -> a
id


unpackedSquare ::
   (Layout.Packing packB) =>
   (Omni.Property propertyA, Omni.Strip lowerA, Omni.Strip upperA) =>
   (Omni.Property propertyB, Omni.Strip lowerB, Omni.Strip upperB) =>
   (Omni.Property propertyC, Omni.Strip lowerC, Omni.Strip upperC) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Shape.C width, Eq width, Class.Floating a) =>
   Full.Unpacked propertyA lowerA upperA meas vert horiz height width a ->
   ArrMatrix.Quadratic packB propertyB lowerB upperB width a ->
   Full.Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare :: Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
unpackedSquare Unpacked propertyA lowerA upperA meas vert horiz height width a
a Quadratic packB propertyB lowerB upperB width a
b = Full meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Full meas vert horiz height width a
 -> Unpacked propertyC lowerC upperC meas vert horiz height width a)
-> Full meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$ Full meas vert horiz height width a
-> Quadratic packB propertyB lowerB upperB width a
-> Full meas vert horiz height width a
forall pack property lower upper meas vert horiz height width a.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, C width, Eq width,
 Floating a) =>
Full meas vert horiz height width a
-> Quadratic pack property lower upper width a
-> Full meas vert horiz height width a
fullSquare (Unpacked propertyA lowerA upperA meas vert horiz height width a
-> Full meas vert horiz height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
unflex Unpacked propertyA lowerA upperA meas vert horiz height width a
a) Quadratic packB propertyB lowerB upperB width a
b

squareUnpacked ::
   (Layout.Packing packA) =>
   (Omni.Property propertyA, Omni.Strip lowerA, Omni.Strip upperA) =>
   (Omni.Property propertyB, Omni.Strip lowerB, Omni.Strip upperB) =>
   (Omni.Property propertyC, Omni.Strip lowerC, Omni.Strip upperC) =>
   (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>
   (Shape.C height, Eq height, Shape.C width, Class.Floating a) =>
   ArrMatrix.Quadratic packA propertyA lowerA upperA height a ->
   Full.Unpacked propertyB lowerB upperB meas vert horiz height width a ->
   Full.Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked :: Quadratic packA propertyA lowerA upperA height a
-> Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
squareUnpacked Quadratic packA propertyA lowerA upperA height a
a Unpacked propertyB lowerB upperB meas vert horiz height width a
b = Full meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex (Full meas vert horiz height width a
 -> Unpacked propertyC lowerC upperC meas vert horiz height width a)
-> Full meas vert horiz height width a
-> Unpacked propertyC lowerC upperC meas vert horiz height width a
forall a b. (a -> b) -> a -> b
$ Quadratic packA propertyA lowerA upperA height a
-> 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.
(Packing pack, Property property, Strip lower, Strip upper,
 Measure meas, C vert, C horiz, C height, Eq height, C width,
 Floating a) =>
Quadratic pack property lower upper height a
-> Full meas vert horiz height width a
-> Full meas vert horiz height width a
squareFull Quadratic packA propertyA lowerA upperA height a
a (Unpacked propertyB lowerB upperB meas vert horiz height width a
-> Full meas vert horiz height width a
forall property lower upper meas vert horiz height width a.
(Property property, Strip lower, Strip upper) =>
Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
unflex Unpacked propertyB lowerB upperB meas vert horiz height width a
b)

unpackedUnpacked ::
   (Omni.Property propertyA, Omni.Strip lowerA, Omni.Strip upperA) =>
   (Omni.Property propertyB, Omni.Strip lowerB, Omni.Strip upperB) =>
   (Omni.Property propertyC, Omni.Strip lowerC, Omni.Strip upperC) =>
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA) =>
   (Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   (Shape.C height, Shape.C fuse, Eq fuse, Shape.C width, Class.Floating a) =>
   Full.Unpacked propertyA lowerA upperA measA vertA horizA height fuse a ->
   Full.Unpacked propertyB lowerB upperB measB vertB horizB fuse width a ->
   Full.Unpacked propertyC lowerC upperC
      (ExtentPriv.MultiplyMeasure measA measB)
      (ExtentPriv.Multiply vertA vertB)
      (ExtentPriv.Multiply horizA horizB)
      height width a
unpackedUnpacked :: Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedUnpacked Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b =
   case Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact (MultiplyMeasure measA measB),
     TagFact (Multiply vertA vertB), TagFact (Multiply horizA horizB)),
    (Map
       measA
       vertA
       horizA
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       height
       fuse,
     Map
       measB
       vertB
       horizB
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       fuse
       width))
forall typA typB xlA xuA xlB xuB measA vertA horizA measB vertB
       horizB measC vertC horizC lowerA upperA height fuse a lowerB upperB
       width.
(Box typA, Box typB, BoxExtra typA xlA, BoxExtra typA xuA,
 BoxExtra typB xlB, BoxExtra typB xuB, Measure measA, C vertA,
 C horizA, Measure measB, C vertB, C horizB,
 MultiplyMeasure measA measB ~ measC, Multiply vertA vertB ~ vertC,
 Multiply horizA horizB ~ horizC) =>
Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b of
      ((MeasureFact (MultiplyMeasure measA measB)
ExtentPriv.MeasureFact, TagFact (Multiply vertA vertB)
ExtentPriv.TagFact, TagFact (Multiply horizA horizB)
ExtentPriv.TagFact),
       (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft, Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight)) ->
         (FullArray
   (MultiplyMeasure measA measB)
   (Multiply vertA vertB)
   (Multiply horizA horizB)
   height
   fuse
   a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      width
      a)
-> UnpackedMatrix
     propertyA
     lowerA
     upperA
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
-> UnpackedMatrix
     propertyB
     lowerB
     upperB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyB lowerB upperB propertyC
       lowerC upperC measA vertA horizA heightA widthA a measB vertB
       horizB heightB widthB b measC vertC horizC heightC widthC c.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Property propertyC,
 Strip lowerC, Strip upperC) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b
 -> FullArray measC vertC horizC heightC widthC c)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
-> UnpackedMatrix
     propertyC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.liftUnpacked2 FullArray
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
  a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall meas vert horiz height fuse width a.
(Measure meas, C vert, C horiz, C height, C fuse, Eq fuse, C width,
 Floating a) =>
Full meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
FullBasic.multiply
            (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
-> Unpacked
     propertyA lowerA upperA measA vertA horizA height fuse a
-> UnpackedMatrix
     propertyA
     lowerA
     upperA
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
forall property lower upper measA vertA horizA measB vertB horizB
       height width a.
(Property property, Strip lower, Strip upper, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Unpacked property lower upper measA vertA horizA height width a
-> Unpacked property lower upper measB vertB horizB height width a
Unpacked.mapExtent Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a)
            (Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> UnpackedMatrix
     propertyB
     lowerB
     upperB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
forall property lower upper measA vertA horizA measB vertB horizB
       height width a.
(Property property, Strip lower, Strip upper, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Unpacked property lower upper measA vertA horizA height width a
-> Unpacked property lower upper measB vertB horizB height width a
Unpacked.mapExtent Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b)

unpackedBanded ::
   (Omni.Property propertyA, Omni.Strip lowerA, Omni.Strip upperA) =>
   (Omni.Property propertyC, Omni.Strip lowerC, Omni.Strip upperC) =>
   (Unary.Natural sub, Unary.Natural super) =>
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA) =>
   (Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   (Shape.C height, Shape.C fuse, Eq fuse, Shape.C width, Class.Floating a) =>
   Full.Unpacked propertyA lowerA upperA measA vertA horizA height fuse a ->
   Banded sub super measB vertB horizB fuse width a ->
   Full.Unpacked propertyC lowerC upperC
      (ExtentPriv.MultiplyMeasure measA measB)
      (ExtentPriv.Multiply vertA vertB)
      (ExtentPriv.Multiply horizA horizB)
      height width a
unpackedBanded :: Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
unpackedBanded Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a Banded sub super measB vertB horizB fuse width a
b =
   case Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
-> Banded sub super measB vertB horizB fuse width a
-> ((MeasureFact (MultiplyMeasure measA measB),
     TagFact (Multiply vertA vertB), TagFact (Multiply horizA horizB)),
    (Map
       measA
       vertA
       horizA
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       height
       fuse,
     Map
       measB
       vertB
       horizB
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       fuse
       width))
forall typA typB xlA xuA xlB xuB measA vertA horizA measB vertB
       horizB measC vertC horizC lowerA upperA height fuse a lowerB upperB
       width.
(Box typA, Box typB, BoxExtra typA xlA, BoxExtra typA xuA,
 BoxExtra typB xlB, BoxExtra typB xuB, Measure measA, C vertA,
 C horizA, Measure measB, C vertB, C horizB,
 MultiplyMeasure measA measB ~ measC, Multiply vertA vertB ~ vertC,
 Multiply horizA horizB ~ horizC) =>
Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a Banded sub super measB vertB horizB fuse width a
b of
      ((MeasureFact (MultiplyMeasure measA measB)
ExtentPriv.MeasureFact, TagFact (Multiply vertA vertB)
ExtentPriv.TagFact, TagFact (Multiply horizA horizB)
ExtentPriv.TagFact),
       (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft, Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight)) ->
         (FlexBanded
   Arbitrary
   sub
   super
   (MultiplyMeasure measA measB)
   (Multiply vertA vertB)
   (Multiply horizA horizB)
   fuse
   width
   a
 -> Unpacked
      propertyA
      upperA
      lowerA
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      fuse
      height
      a
 -> Unpacked
      propertyC
      upperC
      lowerC
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      width
      height
      a)
-> Unpacked
     propertyA
     lowerA
     upperA
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
-> FlexBanded
     Arbitrary
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA measB vertB horizB matrix widthA heightA a widthB heightB.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
(matrix
 -> Unpacked
      propertyA upperA lowerA measA horizA vertA widthA heightA a
 -> Unpacked
      propertyB upperB lowerB measB horizB vertB widthB heightB a)
-> Unpacked
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> matrix
-> Unpacked
     propertyB lowerB upperB measB vertB horizB heightB widthB a
Unpacked.swapMultiply
            ((FullArray
   (MultiplyMeasure measA measB)
   (Multiply horizA horizB)
   (Multiply vertA vertB)
   fuse
   height
   a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      width
      height
      a)
-> Unpacked
     propertyA
     upperA
     lowerA
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     fuse
     height
     a
-> Unpacked
     propertyC
     upperC
     lowerC
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     height
     a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 ((FullArray
    (MultiplyMeasure measA measB)
    (Multiply horizA horizB)
    (Multiply vertA vertB)
    fuse
    height
    a
  -> FullArray
       (MultiplyMeasure measA measB)
       (Multiply horizA horizB)
       (Multiply vertA vertB)
       width
       height
       a)
 -> Unpacked
      propertyA
      upperA
      lowerA
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      fuse
      height
      a
 -> Unpacked
      propertyC
      upperC
      lowerC
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      width
      height
      a)
-> (FlexBanded
      Arbitrary
      sub
      super
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
    -> FullArray
         (MultiplyMeasure measA measB)
         (Multiply horizA horizB)
         (Multiply vertA vertB)
         fuse
         height
         a
    -> FullArray
         (MultiplyMeasure measA measB)
         (Multiply horizA horizB)
         (Multiply vertA vertB)
         width
         height
         a)
-> FlexBanded
     Arbitrary
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Unpacked
     propertyA
     upperA
     lowerA
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     fuse
     height
     a
-> Unpacked
     propertyC
     upperC
     lowerC
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     height
     a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Banded
  super
  sub
  (MultiplyMeasure measA measB)
  (Multiply horizA horizB)
  (Multiply vertA vertB)
  width
  fuse
  a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     fuse
     height
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     height
     a
forall sub super meas vert horiz height width fuse a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, C fuse, Eq fuse, Floating a) =>
Banded sub super meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
BandedBasic.multiplyFull (Banded
   super
   sub
   (MultiplyMeasure measA measB)
   (Multiply horizA horizB)
   (Multiply vertA vertB)
   width
   fuse
   a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      fuse
      height
      a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      width
      height
      a)
-> (FlexBanded
      Arbitrary
      sub
      super
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
    -> Banded
         super
         sub
         (MultiplyMeasure measA measB)
         (Multiply horizA horizB)
         (Multiply vertA vertB)
         width
         fuse
         a)
-> FlexBanded
     Arbitrary
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     fuse
     height
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     height
     a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
             ArrayMatrix
  Packed
  Arbitrary
  (Bands super)
  (Bands sub)
  (MultiplyMeasure measA measB)
  (Multiply horizA horizB)
  (Multiply vertA vertB)
  width
  fuse
  a
-> Banded
     super
     sub
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     fuse
     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 (ArrayMatrix
   Packed
   Arbitrary
   (Bands super)
   (Bands sub)
   (MultiplyMeasure measA measB)
   (Multiply horizA horizB)
   (Multiply vertA vertB)
   width
   fuse
   a
 -> Banded
      super
      sub
      (MultiplyMeasure measA measB)
      (Multiply horizA horizB)
      (Multiply vertA vertB)
      width
      fuse
      a)
-> (FlexBanded
      Arbitrary
      sub
      super
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
    -> ArrayMatrix
         Packed
         Arbitrary
         (Bands super)
         (Bands sub)
         (MultiplyMeasure measA measB)
         (Multiply horizA horizB)
         (Multiply vertA vertB)
         width
         fuse
         a)
-> FlexBanded
     Arbitrary
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Banded
     super
     sub
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     fuse
     a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FlexBanded
  Arbitrary
  sub
  super
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
  a
-> ArrayMatrix
     Packed
     Arbitrary
     (Bands super)
     (Bands sub)
     (MultiplyMeasure measA measB)
     (Multiply horizA horizB)
     (Multiply vertA vertB)
     width
     fuse
     a
forall diag sub super meas vert horiz height width a.
(TriDiag diag, Natural sub, Natural super, Measure meas, C vert,
 C horiz) =>
FlexBanded diag sub super meas vert horiz height width a
-> FlexBanded diag super sub meas horiz vert width height a
Banded.transpose)
            (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
-> Unpacked
     propertyA lowerA upperA measA vertA horizA height fuse a
-> Unpacked
     propertyA
     lowerA
     upperA
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
forall property lower upper measA vertA horizA measB vertB horizB
       height width a.
(Property property, Strip lower, Strip upper, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Unpacked property lower upper measA vertA horizA height width a
-> Unpacked property lower upper measB vertB horizB height width a
Unpacked.mapExtent Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft Unpacked propertyA lowerA upperA measA vertA horizA height fuse a
a)
            (Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
-> Banded sub super measB vertB horizB fuse width a
-> FlexBanded
     Arbitrary
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
forall vertA horizA vertB horizB sub super measA measB height width
       a.
(C vertA, C horizA, C vertB, C horizB, Natural sub,
 Natural super) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
Banded.mapExtent Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight Banded sub super measB vertB horizB fuse width a
b)

bandedUnpacked ::
   (Omni.Property propertyB, Omni.Strip lowerB, Omni.Strip upperB) =>
   (Omni.Property propertyC, Omni.Strip lowerC, Omni.Strip upperC) =>
   (Unary.Natural sub, Unary.Natural super) =>
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA) =>
   (Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   (Shape.C height, Shape.C fuse, Eq fuse, Shape.C width, Class.Floating a) =>
   Banded sub super measA vertA horizA height fuse a ->
   Full.Unpacked propertyB lowerB upperB measB vertB horizB fuse width a ->
   Full.Unpacked propertyC lowerC upperC
      (ExtentPriv.MultiplyMeasure measA measB)
      (ExtentPriv.Multiply vertA vertB)
      (ExtentPriv.Multiply horizA horizB)
      height width a
bandedUnpacked :: Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedUnpacked Banded sub super measA vertA horizA height fuse a
a Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b =
   case Banded sub super measA vertA horizA height fuse a
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact (MultiplyMeasure measA measB),
     TagFact (Multiply vertA vertB), TagFact (Multiply horizA horizB)),
    (Map
       measA
       vertA
       horizA
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       height
       fuse,
     Map
       measB
       vertB
       horizB
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       fuse
       width))
forall typA typB xlA xuA xlB xuB measA vertA horizA measB vertB
       horizB measC vertC horizC lowerA upperA height fuse a lowerB upperB
       width.
(Box typA, Box typB, BoxExtra typA xlA, BoxExtra typA xuA,
 BoxExtra typB xlB, BoxExtra typB xuB, Measure measA, C vertA,
 C horizA, Measure measB, C vertB, C horizB,
 MultiplyMeasure measA measB ~ measC, Multiply vertA vertB ~ vertC,
 Multiply horizA horizB ~ horizC) =>
Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors Banded sub super measA vertA horizA height fuse a
a Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b of
      ((MeasureFact (MultiplyMeasure measA measB)
ExtentPriv.MeasureFact, TagFact (Multiply vertA vertB)
ExtentPriv.TagFact, TagFact (Multiply horizA horizB)
ExtentPriv.TagFact),
       (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft, Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight)) ->
         ((FullArray
   (MultiplyMeasure measA measB)
   (Multiply vertA vertB)
   (Multiply horizA horizB)
   fuse
   width
   a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      width
      a)
-> UnpackedMatrix
     propertyB
     lowerB
     upperB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 ((FullArray
    (MultiplyMeasure measA measB)
    (Multiply vertA vertB)
    (Multiply horizA horizB)
    fuse
    width
    a
  -> FullArray
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       height
       width
       a)
 -> UnpackedMatrix
      propertyB
      lowerB
      upperB
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
 -> Unpacked
      propertyC
      lowerC
      upperC
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      width
      a)
-> (ArrayMatrix
      Packed
      Arbitrary
      (Bands sub)
      (Bands super)
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      fuse
      a
    -> FullArray
         (MultiplyMeasure measA measB)
         (Multiply vertA vertB)
         (Multiply horizA horizB)
         fuse
         width
         a
    -> FullArray
         (MultiplyMeasure measA measB)
         (Multiply vertA vertB)
         (Multiply horizA horizB)
         height
         width
         a)
-> ArrayMatrix
     Packed
     Arbitrary
     (Bands sub)
     (Bands super)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
-> UnpackedMatrix
     propertyB
     lowerB
     upperB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Unpacked
     propertyC
     lowerC
     upperC
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Banded
  sub
  super
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
  a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall sub super meas vert horiz height width fuse a.
(Natural sub, Natural super, Measure meas, C vert, C horiz,
 C height, C width, C fuse, Eq fuse, Floating a) =>
Banded sub super meas vert horiz height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
BandedBasic.multiplyFull (Banded
   sub
   super
   (MultiplyMeasure measA measB)
   (Multiply vertA vertB)
   (Multiply horizA horizB)
   height
   fuse
   a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      fuse
      width
      a
 -> FullArray
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      width
      a)
-> (ArrayMatrix
      Packed
      Arbitrary
      (Bands sub)
      (Bands super)
      (MultiplyMeasure measA measB)
      (Multiply vertA vertB)
      (Multiply horizA horizB)
      height
      fuse
      a
    -> Banded
         sub
         super
         (MultiplyMeasure measA measB)
         (Multiply vertA vertB)
         (Multiply horizA horizB)
         height
         fuse
         a)
-> ArrayMatrix
     Packed
     Arbitrary
     (Bands sub)
     (Bands super)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> FullArray
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
          ArrayMatrix
  Packed
  Arbitrary
  (Bands sub)
  (Bands super)
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
  a
-> Banded
     sub
     super
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     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)
            (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
-> Banded sub super measA vertA horizA height fuse a
-> ArrayMatrix
     Packed
     Arbitrary
     (Bands sub)
     (Bands super)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
forall vertA horizA vertB horizB sub super measA measB height width
       a.
(C vertA, C horizA, C vertB, C horizB, Natural sub,
 Natural super) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
Banded.mapExtent Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft Banded sub super measA vertA horizA height fuse a
a)
            (Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
-> Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
-> UnpackedMatrix
     propertyB
     lowerB
     upperB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
forall property lower upper measA vertA horizA measB vertB horizB
       height width a.
(Property property, Strip lower, Strip upper, Measure measA,
 C vertA, C horizA, Measure measB, C vertB, C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> Unpacked property lower upper measA vertA horizA height width a
-> Unpacked property lower upper measB vertB horizB height width a
Unpacked.mapExtent Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight Unpacked propertyB lowerB upperB measB vertB horizB fuse width a
b)


bandedBanded ::
   (Unary.Natural subA, Unary.Natural superA) =>
   (Unary.Natural subB, Unary.Natural superB) =>
   (Extent.Measure measA, Extent.Measure measB) =>
   (Extent.C vertA, Extent.C horizA) =>
   (Extent.C vertB, Extent.C horizB) =>
   (Shape.C height, Shape.C fuse, Eq fuse, Shape.C width, Class.Floating a) =>
   Banded subA superA measA vertA horizA height fuse a ->
   Banded subB superB measB vertB horizB fuse width a ->
   Banded
      (subA :+: subB) (superA :+: superB)
      (ExtentPriv.MultiplyMeasure measA measB)
      (ExtentPriv.Multiply vertA vertB)
      (ExtentPriv.Multiply horizA horizB)
      height width a
bandedBanded :: Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
bandedBanded Banded subA superA measA vertA horizA height fuse a
a Banded subB superB measB vertB horizB fuse width a
b =
   case Banded subA superA measA vertA horizA height fuse a
-> Banded subB superB measB vertB horizB fuse width a
-> ((MeasureFact (MultiplyMeasure measA measB),
     TagFact (Multiply vertA vertB), TagFact (Multiply horizA horizB)),
    (Map
       measA
       vertA
       horizA
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       height
       fuse,
     Map
       measB
       vertB
       horizB
       (MultiplyMeasure measA measB)
       (Multiply vertA vertB)
       (Multiply horizA horizB)
       fuse
       width))
forall typA typB xlA xuA xlB xuB measA vertA horizA measB vertB
       horizB measC vertC horizC lowerA upperA height fuse a lowerB upperB
       width.
(Box typA, Box typB, BoxExtra typA xlA, BoxExtra typA xuA,
 BoxExtra typB xlB, BoxExtra typB xuB, Measure measA, C vertA,
 C horizA, Measure measB, C vertB, C horizB,
 MultiplyMeasure measA measB ~ measC, Multiply vertA vertB ~ vertC,
 Multiply horizA horizB ~ horizC) =>
Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors Banded subA superA measA vertA horizA height fuse a
a Banded subB superB measB vertB horizB fuse width a
b of
      ((MeasureFact (MultiplyMeasure measA measB)
ExtentPriv.MeasureFact, TagFact (Multiply vertA vertB)
ExtentPriv.TagFact, TagFact (Multiply horizA horizB)
ExtentPriv.TagFact),
       (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft, Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight)) ->
         Banded
  subA
  superA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
  a
-> Banded
     subB
     superB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
-> Banded
     (subA :+: subB)
     (superA :+: superB)
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     width
     a
forall subA superA subB superB subC superC meas vert horiz height
       width fuse a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 (subA :+: subB) ~ subC, (superA :+: superB) ~ superC, Measure meas,
 C vert, C horiz, C height, C width, C fuse, Eq fuse, Floating a) =>
Banded subA superA meas vert horiz height fuse a
-> Banded subB superB meas vert horiz fuse width a
-> Banded subC superC meas vert horiz height width a
Banded.multiply
            (Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
-> Banded subA superA measA vertA horizA height fuse a
-> Banded
     subA
     superA
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     height
     fuse
     a
forall vertA horizA vertB horizB sub super measA measB height width
       a.
(C vertA, C horizA, C vertB, C horizB, Natural sub,
 Natural super) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
Banded.mapExtent Map
  measA
  vertA
  horizA
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  height
  fuse
unifyLeft Banded subA superA measA vertA horizA height fuse a
a)
            (Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
-> Banded subB superB measB vertB horizB fuse width a
-> Banded
     subB
     superB
     (MultiplyMeasure measA measB)
     (Multiply vertA vertB)
     (Multiply horizA horizB)
     fuse
     width
     a
forall vertA horizA vertB horizB sub super measA measB height width
       a.
(C vertA, C horizA, C vertB, C horizB, Natural sub,
 Natural super) =>
Map measA vertA horizA measB vertB horizB height width
-> Banded sub super measA vertA horizA height width a
-> Banded sub super measB vertB horizB height width a
Banded.mapExtent Map
  measB
  vertB
  horizB
  (MultiplyMeasure measA measB)
  (Multiply vertA vertB)
  (Multiply horizA horizB)
  fuse
  width
unifyRight Banded subB superB measB vertB horizB fuse width a
b)

bandedUpper ::
   (Unary.Natural superA, Unary.Natural superB,
    (Unary.Succ superA :+: superB) ~ superC,
    Shape.C size, Eq size, Class.Floating a) =>
   Banded.UnitUpper (Unary.Succ superA) size a ->
   Banded.UnitUpper (Unary.Succ superB) size a ->
   Banded.UnitUpper (Unary.Succ superC) size a
bandedUpper :: UnitUpper (Succ superA) size a
-> UnitUpper (Succ superB) size a -> UnitUpper (Succ superC) size a
bandedUpper UnitUpper (Succ superA) size a
a UnitUpper (Succ superB) size a
b =
   case ((UnaryProxy Zero, UnaryProxy (Succ superA))
-> UnaryProxy (Succ superA)
forall a b. (a, b) -> b
snd ((UnaryProxy Zero, UnaryProxy (Succ superA))
 -> UnaryProxy (Succ superA))
-> (UnaryProxy Zero, UnaryProxy (Succ superA))
-> UnaryProxy (Succ superA)
forall a b. (a -> b) -> a -> b
$ Omni
  Packed Unit Empty (Bands (Succ superA)) Shape Small Small size size
-> (UnaryProxy Zero, UnaryProxy (Succ superA))
forall property sub super meas vert horiz height width.
Omni
  Packed
  property
  (Bands sub)
  (Bands super)
  meas
  vert
  horiz
  height
  width
-> (UnaryProxy sub, UnaryProxy super)
MatrixShape.bandedOffDiagonals (Omni
   Packed Unit Empty (Bands (Succ superA)) Shape Small Small size size
 -> (UnaryProxy Zero, UnaryProxy (Succ superA)))
-> Omni
     Packed Unit Empty (Bands (Succ superA)) Shape Small Small size size
-> (UnaryProxy Zero, UnaryProxy (Succ superA))
forall a b. (a -> b) -> a -> b
$ UnitUpper (Succ superA) size a
-> Omni
     Packed Unit Empty (Bands (Succ superA)) Shape Small Small size size
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape UnitUpper (Succ superA) size a
a,
         (UnaryProxy Zero, UnaryProxy (Succ superB))
-> UnaryProxy (Succ superB)
forall a b. (a, b) -> b
snd ((UnaryProxy Zero, UnaryProxy (Succ superB))
 -> UnaryProxy (Succ superB))
-> (UnaryProxy Zero, UnaryProxy (Succ superB))
-> UnaryProxy (Succ superB)
forall a b. (a -> b) -> a -> b
$ Omni
  Packed Unit Empty (Bands (Succ superB)) Shape Small Small size size
-> (UnaryProxy Zero, UnaryProxy (Succ superB))
forall property sub super meas vert horiz height width.
Omni
  Packed
  property
  (Bands sub)
  (Bands super)
  meas
  vert
  horiz
  height
  width
-> (UnaryProxy sub, UnaryProxy super)
MatrixShape.bandedOffDiagonals (Omni
   Packed Unit Empty (Bands (Succ superB)) Shape Small Small size size
 -> (UnaryProxy Zero, UnaryProxy (Succ superB)))
-> Omni
     Packed Unit Empty (Bands (Succ superB)) Shape Small Small size size
-> (UnaryProxy Zero, UnaryProxy (Succ superB))
forall a b. (a -> b) -> a -> b
$ UnitUpper (Succ superB) size a
-> Omni
     Packed Unit Empty (Bands (Succ superB)) Shape Small Small size size
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape UnitUpper (Succ superB) size a
b) of
      (UnaryProxy (Succ superA)
superA,UnaryProxy (Succ superB)
superB) ->
         case Nat (Succ superA) -> Nat superB -> Nat (Succ superA :+: superB)
forall x y. Nat x -> Nat y -> Nat (x :+: y)
Proof.addNat (UnaryProxy (Succ superA) -> Nat (Succ superA)
forall n. Natural n => UnaryProxy n -> Nat n
natFromProxy UnaryProxy (Succ superA)
superA) (UnaryProxy superB -> Nat superB
forall n. Natural n => UnaryProxy n -> Nat n
natFromProxy (UnaryProxy superB -> Nat superB)
-> UnaryProxy superB -> Nat superB
forall a b. (a -> b) -> a -> b
$ UnaryProxy (Succ superB) -> UnaryProxy superB
forall x. UnaryProxy (Succ x) -> UnaryProxy x
prev UnaryProxy (Succ superB)
superB) of
            Nat (Succ superA :+: superB)
Proof.Nat -> (PlainArray
   Packed
   Unit
   Empty
   (Bands (Succ superA))
   Shape
   Small
   Small
   size
   size
   a
 -> PlainArray
      Packed
      Unit
      Empty
      (Bands (Succ superB))
      Shape
      Small
      Small
      size
      size
      a
 -> PlainArray
      Packed
      Unit
      Empty
      (Bands (Succ superC))
      Shape
      Small
      Small
      size
      size
      a)
-> UnitUpper (Succ superA) size a
-> UnitUpper (Succ superB) size a
-> UnitUpper (Succ superC) size a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 PlainArray
  Packed
  Unit
  Empty
  (Bands (Succ superA))
  Shape
  Small
  Small
  size
  size
  a
-> PlainArray
     Packed
     Unit
     Empty
     (Bands (Succ superB))
     Shape
     Small
     Small
     size
     size
     a
-> PlainArray
     Packed
     Unit
     Empty
     (Bands (Succ superC))
     Shape
     Small
     Small
     size
     size
     a
forall subA superA subB superB subC superC meas vert horiz height
       width fuse a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 (subA :+: subB) ~ subC, (superA :+: superB) ~ superC, Measure meas,
 C vert, C horiz, C height, C width, C fuse, Eq fuse, Floating a) =>
Banded subA superA meas vert horiz height fuse a
-> Banded subB superB meas vert horiz fuse width a
-> Banded subC superC meas vert horiz height width a
BandedBasic.multiply UnitUpper (Succ superA) size a
a UnitUpper (Succ superB) size a
b

bandedLower ::
   (Unary.Natural subA, Unary.Natural subB,
    (Unary.Succ subA :+: subB) ~ subC,
    Shape.C size, Eq size, Class.Floating a) =>
   Banded.UnitLower (Unary.Succ subA) size a ->
   Banded.UnitLower (Unary.Succ subB) size a ->
   Banded.UnitLower (Unary.Succ subC) size a
bandedLower :: UnitLower (Succ subA) size a
-> UnitLower (Succ subB) size a -> UnitLower (Succ subC) size a
bandedLower UnitLower (Succ subA) size a
a UnitLower (Succ subB) size a
b =
   case ((UnaryProxy (Succ subA), UnaryProxy Zero) -> UnaryProxy (Succ subA)
forall a b. (a, b) -> a
fst ((UnaryProxy (Succ subA), UnaryProxy Zero)
 -> UnaryProxy (Succ subA))
-> (UnaryProxy (Succ subA), UnaryProxy Zero)
-> UnaryProxy (Succ subA)
forall a b. (a -> b) -> a -> b
$ Omni
  Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size
-> (UnaryProxy (Succ subA), UnaryProxy Zero)
forall property sub super meas vert horiz height width.
Omni
  Packed
  property
  (Bands sub)
  (Bands super)
  meas
  vert
  horiz
  height
  width
-> (UnaryProxy sub, UnaryProxy super)
MatrixShape.bandedOffDiagonals (Omni
   Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size
 -> (UnaryProxy (Succ subA), UnaryProxy Zero))
-> Omni
     Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size
-> (UnaryProxy (Succ subA), UnaryProxy Zero)
forall a b. (a -> b) -> a -> b
$ UnitLower (Succ subA) size a
-> Omni
     Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape UnitLower (Succ subA) size a
a,
         (UnaryProxy (Succ subB), UnaryProxy Zero) -> UnaryProxy (Succ subB)
forall a b. (a, b) -> a
fst ((UnaryProxy (Succ subB), UnaryProxy Zero)
 -> UnaryProxy (Succ subB))
-> (UnaryProxy (Succ subB), UnaryProxy Zero)
-> UnaryProxy (Succ subB)
forall a b. (a -> b) -> a -> b
$ Omni
  Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size
-> (UnaryProxy (Succ subB), UnaryProxy Zero)
forall property sub super meas vert horiz height width.
Omni
  Packed
  property
  (Bands sub)
  (Bands super)
  meas
  vert
  horiz
  height
  width
-> (UnaryProxy sub, UnaryProxy super)
MatrixShape.bandedOffDiagonals (Omni
   Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size
 -> (UnaryProxy (Succ subB), UnaryProxy Zero))
-> Omni
     Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size
-> (UnaryProxy (Succ subB), UnaryProxy Zero)
forall a b. (a -> b) -> a -> b
$ UnitLower (Succ subB) size a
-> Omni
     Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size
forall pack property lower upper meas vert horiz height width a.
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> Omni pack property lower upper meas vert horiz height width
ArrMatrix.shape UnitLower (Succ subB) size a
b) of
      (UnaryProxy (Succ subA)
subA,UnaryProxy (Succ subB)
subB) ->
         case Nat (Succ subA) -> Nat subB -> Nat (Succ subA :+: subB)
forall x y. Nat x -> Nat y -> Nat (x :+: y)
Proof.addNat (UnaryProxy (Succ subA) -> Nat (Succ subA)
forall n. Natural n => UnaryProxy n -> Nat n
natFromProxy UnaryProxy (Succ subA)
subA) (UnaryProxy subB -> Nat subB
forall n. Natural n => UnaryProxy n -> Nat n
natFromProxy (UnaryProxy subB -> Nat subB) -> UnaryProxy subB -> Nat subB
forall a b. (a -> b) -> a -> b
$ UnaryProxy (Succ subB) -> UnaryProxy subB
forall x. UnaryProxy (Succ x) -> UnaryProxy x
prev UnaryProxy (Succ subB)
subB) of
            Nat (Succ subA :+: subB)
Proof.Nat -> (PlainArray
   Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size a
 -> PlainArray
      Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size a
 -> PlainArray
      Packed
      Unit
      (Bands (Succ subC))
      Empty
      Shape
      Small
      Small
      size
      size
      a)
-> UnitLower (Succ subA) size a
-> UnitLower (Succ subB) size a
-> UnitLower (Succ subC) size a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB packC
       propC lowerC upperC measC vertC horizC heightC widthC a b c.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 ToPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB,
 FromPlain
   packC propC lowerC upperC measC vertC horizC heightC widthC) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b
 -> PlainArray
      packC propC lowerC upperC measC vertC horizC heightC widthC c)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
-> ArrayMatrix
     packC propC lowerC upperC measC vertC horizC heightC widthC c
ArrMatrix.lift2 PlainArray
  Packed Unit (Bands (Succ subA)) Empty Shape Small Small size size a
-> PlainArray
     Packed Unit (Bands (Succ subB)) Empty Shape Small Small size size a
-> PlainArray
     Packed Unit (Bands (Succ subC)) Empty Shape Small Small size size a
forall subA superA subB superB subC superC meas vert horiz height
       width fuse a.
(Natural subA, Natural superA, Natural subB, Natural superB,
 (subA :+: subB) ~ subC, (superA :+: superB) ~ superC, Measure meas,
 C vert, C horiz, C height, C width, C fuse, Eq fuse, Floating a) =>
Banded subA superA meas vert horiz height fuse a
-> Banded subB superB meas vert horiz fuse width a
-> Banded subC superC meas vert horiz height width a
BandedBasic.multiply UnitLower (Succ subA) size a
a UnitLower (Succ subB) size a
b

prev :: UnaryProxy (Succ x) -> UnaryProxy x
prev :: UnaryProxy (Succ x) -> UnaryProxy x
prev UnaryProxy (Succ x)
Proxy = UnaryProxy x
forall a. Proxy a
Proxy


unifyFactors ::
   (Matrix.Box typA, Matrix.Box typB) =>
   (Matrix.BoxExtra typA xlA, Matrix.BoxExtra typA xuA) =>
   (Matrix.BoxExtra typB xlB, Matrix.BoxExtra typB xuB) =>
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA,
    Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   (ExtentPriv.MultiplyMeasure measA measB ~ measC) =>
   (ExtentPriv.Multiply vertA vertB ~ vertC) =>
   (ExtentPriv.Multiply horizA horizB ~ horizC) =>
   Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a ->
   Matrix typB xlB xuB lowerB upperB measB vertB horizB fuse width a ->
   ((ExtentPriv.MeasureFact measC,
     ExtentPriv.TagFact vertC, ExtentPriv.TagFact horizC),
    (Extent.Map measA vertA horizA measC vertC horizC height fuse,
     Extent.Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors :: Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Matrix
     typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
unifyFactors Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
a Matrix typB xlB xuB lowerB upperB measB vertB horizB fuse width a
b = Extent measA vertA horizA height fuse
-> Extent measB vertB horizB fuse width
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
forall measA vertA horizA measB vertB horizB measC vertC horizC
       height fuse width.
(Measure measA, C vertA, C horizA, Measure measB, C vertB,
 C horizB, MultiplyMeasure measA measB ~ measC,
 Multiply vertA vertB ~ vertC, Multiply horizA horizB ~ horizC) =>
Extent measA vertA horizA height fuse
-> Extent measB vertB horizB fuse width
-> ((MeasureFact measC, TagFact vertC, TagFact horizC),
    (Map measA vertA horizA measC vertC horizC height fuse,
     Map measB vertB horizB measC vertC horizC fuse width))
ExtentStrict.unifiers (Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
-> Extent measA vertA horizA height fuse
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent Matrix typA xlA xuA lowerA upperA measA vertA horizA height fuse a
a) (Matrix typB xlB xuB lowerB upperB measB vertB horizB fuse width a
-> Extent measB vertB horizB fuse width
forall typ xl xu meas vert horiz lower upper height width a.
(Box typ, BoxExtra typ xl, BoxExtra typ xu, Measure meas, C vert,
 C horiz) =>
Matrix typ xl xu lower upper meas vert horiz height width a
-> Extent meas vert horiz height width
Matrix.extent Matrix typB xlB xuB lowerB upperB measB vertB horizB fuse width a
b)


unflex ::
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   Full.Unpacked property lower upper meas vert horiz height width a ->
   ArrMatrix.Full meas vert horiz height width a
unflex :: Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
unflex = (FullArray meas vert horiz height width a
 -> FullArray meas vert horiz height width a)
-> Unpacked property lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 FullArray meas vert horiz height width a
-> FullArray meas vert horiz height width a
forall a. a -> a
id

flex ::
   (Omni.Property property, Omni.Strip lower, Omni.Strip upper) =>
   ArrMatrix.Full meas vert horiz height width a ->
   Full.Unpacked property lower upper meas vert horiz height width a
flex :: Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
flex = (FullArray meas vert horiz height width a
 -> FullArray meas vert horiz height width a)
-> Full meas vert horiz height width a
-> Unpacked property lower upper meas vert horiz height width a
forall propertyA lowerA upperA propertyB lowerB upperB measA vertA
       horizA heightA widthA a measB vertB horizB heightB widthB b.
(Property propertyA, Strip lowerA, Strip upperA,
 Property propertyB, Strip lowerB, Strip upperB) =>
(FullArray measA vertA horizA heightA widthA a
 -> FullArray measB vertB horizB heightB widthB b)
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.liftUnpacked1 FullArray meas vert horiz height width a
-> FullArray meas vert horiz height width a
forall a. a -> a
id


property ::
   (Omni.Property property) =>
   ArrayMatrix pack property lower upper meas vert horiz height width a ->
   Omni.PropertySingleton property
property :: ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> PropertySingleton property
property ArrayMatrix
  pack property lower upper meas vert horiz height width a
_ = PropertySingleton property
forall property. Property property => PropertySingleton property
Omni.propertySingleton