{-# LANGUAGE TypeOperators #-} {-# LANGUAGE GADTs #-} module Numeric.LAPACK.Matrix.Diagonal ( Diagonal, FlexDiagonal, fromList, autoFromList, fromVector, lift, stack, (%%%), split, multiply, solve, inverse, determinant, ) where import qualified Numeric.LAPACK.Matrix.Quadratic as Quad import qualified Numeric.LAPACK.Matrix.Banded as Banded import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix import qualified Numeric.LAPACK.Matrix.Basic as FullBasic import qualified Numeric.LAPACK.Matrix.Shape.Omni as Omni import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.Scalar as Scalar import Numeric.LAPACK.Matrix.Array.Banded (Diagonal, FlexDiagonal) import Numeric.LAPACK.Matrix.Layout.Private (Order) import Numeric.LAPACK.Matrix.Private (ShapeInt) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Shape.Private (Unchecked(Unchecked)) import qualified Numeric.Netlib.Class as Class import Type.Base.Proxy (Proxy(Proxy)) import qualified Data.Array.Comfort.Storable.Unchecked as Array import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Storable (Array) import Data.Array.Comfort.Shape ((::+)) import Foreign.Storable (Storable) fromList :: (Shape.C sh, Storable a) => Order -> sh -> [a] -> Diagonal sh a fromList :: Order -> sh -> [a] -> Diagonal sh a fromList Order order sh sh = (UnaryProxy U0, UnaryProxy U0) -> Order -> sh -> [a] -> Diagonal sh a forall sub super size a. (Natural sub, Natural super, C size, Storable a) => (UnaryProxy sub, UnaryProxy super) -> Order -> size -> [a] -> Square sub super size a Banded.squareFromList (UnaryProxy U0 forall a. Proxy a Proxy,UnaryProxy U0 forall a. Proxy a Proxy) Order order sh sh autoFromList :: (Storable a) => Order -> [a] -> Diagonal ShapeInt a autoFromList :: Order -> [a] -> Diagonal ShapeInt a autoFromList Order order = Order -> Vector ShapeInt a -> Diagonal ShapeInt a forall sh a. (C sh, Storable a) => Order -> Vector sh a -> Diagonal sh a fromVector Order order (Vector ShapeInt a -> Diagonal ShapeInt a) -> ([a] -> Vector ShapeInt a) -> [a] -> Diagonal ShapeInt a forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> Vector ShapeInt a forall a. Storable a => [a] -> Vector ShapeInt a Vector.autoFromList fromVector :: (Shape.C sh, Storable a) => Order -> Vector sh a -> Diagonal sh a fromVector :: Order -> Vector sh a -> Diagonal sh a fromVector Order order = OmniArray Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh a -> Diagonal 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 (OmniArray Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh a -> Diagonal sh a) -> (Vector sh a -> OmniArray Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh a) -> Vector sh a -> Diagonal sh a forall b c a. (b -> c) -> (a -> b) -> a -> c . (sh -> Omni Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh) -> Vector sh a -> OmniArray Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh a forall sh0 sh1 a. (sh0 -> sh1) -> Array sh0 a -> Array sh1 a Array.mapShape (Order -> sh -> Omni Packed Arbitrary (Bands U0) (Bands U0) Shape Small Small sh sh forall pack property lower upper sh. (Quadratic pack property lower upper, C sh) => Order -> sh -> Omni pack property lower upper Shape Small Small sh sh Omni.quadratic Order order) takeDiagonal :: (Omni.TriDiag diag) => FlexDiagonal diag sh a -> Vector sh a takeDiagonal :: FlexDiagonal diag sh a -> Vector sh a takeDiagonal = (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh -> sh) -> Array (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a -> Vector sh a forall sh0 sh1 a. (sh0 -> sh1) -> Array sh0 a -> Array sh1 a Array.mapShape Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh -> sh forall pack property lower upper sh. Omni pack property lower upper Shape Small Small sh sh -> sh Omni.squareSize (Array (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a -> Vector sh a) -> (FlexDiagonal diag sh a -> Array (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a) -> FlexDiagonal diag sh a -> Vector sh a forall b c a. (b -> c) -> (a -> b) -> a -> c . FlexDiagonal diag sh a -> Array (Omni Packed diag (Bands U0) (Bands U0) 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 lift :: (Layout.Packing pack, Shape.C sha, Shape.C shb, Class.Floating a, Class.Floating b) => (Array sha a -> Array shb b) -> FlexDiagonalP pack Omni.Arbitrary sha a -> FlexDiagonalP pack Omni.Arbitrary shb b lift :: (Array sha a -> Array shb b) -> FlexDiagonalP pack Arbitrary sha a -> FlexDiagonalP pack Arbitrary shb b lift Array sha a -> Array shb b f FlexDiagonalP pack Arbitrary sha a a = case FlexDiagonalP pack Arbitrary sha a -> PackingSingleton pack forall pack diag lower upper meas vert horiz height width a. Packing pack => ArrayMatrix pack diag lower upper meas vert horiz height width a -> PackingSingleton pack ArrMatrix.packTag FlexDiagonalP pack Arbitrary sha a a of PackingSingleton pack Layout.Packed -> Order -> Array shb b -> FlexDiagonalP pack Arbitrary shb b forall property pack lower upper sh a. (Diagonal property, Quadratic pack property lower upper, C sh, Floating a) => Order -> Vector sh a -> Quadratic pack property lower upper sh a Quad.diagonal (FlexDiagonalP pack Arbitrary sha 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 FlexDiagonalP pack Arbitrary sha a a) (Array shb b -> FlexDiagonalP pack Arbitrary shb b) -> Array shb b -> FlexDiagonalP pack Arbitrary shb b forall a b. (a -> b) -> a -> b $ Array sha a -> Array shb b f (Array sha a -> Array shb b) -> Array sha a -> Array shb b forall a b. (a -> b) -> a -> b $ FlexDiagonalP pack Arbitrary sha a -> Array sha a forall sh a pack property lower upper. (C sh, Floating a) => Quadratic pack property lower upper sh a -> Vector sh a Quad.takeDiagonal FlexDiagonalP pack Arbitrary sha a a PackingSingleton pack Layout.Unpacked -> Order -> Array shb b -> FlexDiagonalP pack Arbitrary shb b forall property pack lower upper sh a. (Diagonal property, Quadratic pack property lower upper, C sh, Floating a) => Order -> Vector sh a -> Quadratic pack property lower upper sh a Quad.diagonal (FlexDiagonalP pack Arbitrary sha 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 FlexDiagonalP pack Arbitrary sha a a) (Array shb b -> FlexDiagonalP pack Arbitrary shb b) -> Array shb b -> FlexDiagonalP pack Arbitrary shb b forall a b. (a -> b) -> a -> b $ Array sha a -> Array shb b f (Array sha a -> Array shb b) -> Array sha a -> Array shb b forall a b. (a -> b) -> a -> b $ FlexDiagonalP pack Arbitrary sha a -> Array sha a forall sh a pack property lower upper. (C sh, Floating a) => Quadratic pack property lower upper sh a -> Vector sh a Quad.takeDiagonal FlexDiagonalP pack Arbitrary sha a a type FlexDiagonalP pack diag sh = ArrMatrix.Quadratic pack diag Layout.Empty Layout.Empty sh infixr 2 %%% (%%%), stack :: (Layout.Packing pack) => (Omni.TriDiag diag, Shape.C sh0, Shape.C sh1, Class.Floating a) => FlexDiagonalP pack diag sh0 a -> FlexDiagonalP pack diag sh1 a -> FlexDiagonalP pack diag (sh0::+sh1) a %%% :: FlexDiagonalP pack diag sh0 a -> FlexDiagonalP pack diag sh1 a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a (%%%) = FlexDiagonalP pack diag sh0 a -> FlexDiagonalP pack diag sh1 a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a forall pack diag sh0 sh1 a. (Packing pack, TriDiag diag, C sh0, C sh1, Floating a) => FlexDiagonalP pack diag sh0 a -> FlexDiagonalP pack diag sh1 a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a stack stack :: FlexDiagonalP pack diag sh0 a -> FlexDiagonalP pack diag sh1 a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a stack FlexDiagonalP pack diag sh0 a a FlexDiagonalP pack diag sh1 a b = let order :: Order order = Omni pack diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 -> Order forall pack property lower upper meas vert horiz height width. Omni pack property lower upper meas vert horiz height width -> Order Omni.order (Omni pack diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 -> Order) -> Omni pack diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 -> Order forall a b. (a -> b) -> a -> b $ FlexDiagonalP pack diag sh1 a -> Omni pack diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 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 FlexDiagonalP pack diag sh1 a b in case FlexDiagonalP pack diag sh0 a -> PackingSingleton pack forall pack diag lower upper meas vert horiz height width a. Packing pack => ArrayMatrix pack diag lower upper meas vert horiz height width a -> PackingSingleton pack ArrMatrix.packTag FlexDiagonalP pack diag sh0 a a of PackingSingleton pack Layout.Packed -> OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a -> FlexDiagonalP pack diag (sh0 ::+ sh1) 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 (OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a) -> OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a -> FlexDiagonalP pack diag (sh0 ::+ sh1) a forall a b. (a -> b) -> a -> b $ ((sh0 ::+ sh1) -> Omni pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1)) -> Array (sh0 ::+ sh1) a -> OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a forall sh0 sh1 a. (sh0 -> sh1) -> Array sh0 a -> Array sh1 a Array.mapShape (Order -> (sh0 ::+ sh1) -> Omni pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) forall pack diag size. (Packing pack, TriDiag diag) => Order -> size -> Omni pack diag (Bands U0) (Bands U0) Shape Small Small size size Omni.uncheckedDiagonal Order order) (Array (sh0 ::+ sh1) a -> OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a) -> Array (sh0 ::+ sh1) a -> OmniArray pack diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a forall a b. (a -> b) -> a -> b $ Array sh0 a -> Array sh1 a -> Array (sh0 ::+ sh1) a forall shx shy a. (C shx, C shy, Storable a) => Array shx a -> Array shy a -> Array (shx ::+ shy) a Vector.append (FlexDiagonal diag sh0 a -> Array sh0 a forall diag sh a. TriDiag diag => FlexDiagonal diag sh a -> Vector sh a takeDiagonal FlexDiagonalP pack diag sh0 a FlexDiagonal diag sh0 a a) (FlexDiagonal diag sh1 a -> Array sh1 a forall diag sh a. TriDiag diag => FlexDiagonal diag sh a -> Vector sh a takeDiagonal FlexDiagonalP pack diag sh1 a FlexDiagonal diag sh1 a b) PackingSingleton pack Layout.Unpacked -> let shc :: General (Unchecked sh0) (Unchecked sh1) shc = Order -> Unchecked sh0 -> Unchecked sh1 -> General (Unchecked sh0) (Unchecked sh1) forall height width. Order -> height -> width -> General height width Layout.general Order order (sh0 -> Unchecked sh0 forall sh. sh -> Unchecked sh Unchecked (sh0 -> Unchecked sh0) -> sh0 -> Unchecked sh0 forall a b. (a -> b) -> a -> b $ FlexDiagonalP pack diag sh0 a -> sh0 forall pack property lower upper sh a. Quadratic pack property lower upper sh a -> sh Quad.size FlexDiagonalP pack diag sh0 a a) (sh1 -> Unchecked sh1 forall sh. sh -> Unchecked sh Unchecked (sh1 -> Unchecked sh1) -> sh1 -> Unchecked sh1 forall a b. (a -> b) -> a -> b $ FlexDiagonalP pack diag sh1 a -> sh1 forall pack property lower upper sh a. Quadratic pack property lower upper sh a -> sh Quad.size FlexDiagonalP pack diag sh1 a b) in (FullArray Shape Small Small sh0 sh0 a -> FullArray Shape Small Small sh1 sh1 a -> FullArray Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a) -> UnpackedMatrix diag (Bands U0) (Bands U0) Shape Small Small sh0 sh0 a -> UnpackedMatrix diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 a -> UnpackedMatrix diag (Bands U0) (Bands U0) Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) 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 sh0 sh0 a a_ FullArray Shape Small Small sh1 sh1 a b_ -> (Extent Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) -> Extent Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1)) -> Full Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) a -> FullArray Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a forall measA vertA horizA heightA widthA measB vertB horizB heightB widthB a. (Extent measA vertA horizA heightA widthA -> Extent measB vertB horizB heightB widthB) -> Full measA vertA horizA heightA widthA a -> Full measB vertB horizB heightB widthB a FullBasic.mapExtent Extent Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) -> Extent Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) forall meas vert horiz heightA heightB widthA widthB. (Measure meas, C vert, C horiz) => Extent meas vert horiz (Unchecked heightA ::+ Unchecked heightB) (Unchecked widthA ::+ Unchecked widthB) -> Extent meas vert horiz (heightA ::+ heightB) (widthA ::+ widthB) Extent.recheckAppend (Full Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) a -> FullArray Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a) -> Full Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) a -> FullArray Shape Small Small (sh0 ::+ sh1) (sh0 ::+ sh1) a forall a b. (a -> b) -> a -> b $ Full Shape Small Small (Unchecked sh0) (Unchecked sh0) a -> General (Unchecked sh0) (Unchecked sh1) a -> General (Unchecked sh1) (Unchecked sh0) a -> Full Shape Small Small (Unchecked sh1) (Unchecked sh1) a -> Full Shape Small Small (Unchecked sh0 ::+ Unchecked sh1) (Unchecked sh0 ::+ Unchecked sh1) a forall meas vert horiz heightA heightB widthA widthB a. (Measure meas, C vert, C horiz, C heightA, Eq heightA, C heightB, Eq heightB, C widthA, Eq widthA, C widthB, Eq widthB, Floating a) => Full meas vert horiz heightA widthA a -> General heightA widthB a -> General heightB widthA a -> Full meas vert horiz heightB widthB a -> Full meas vert horiz (heightA ::+ heightB) (widthA ::+ widthB) a FullBasic.stack (FullArray Shape Small Small sh0 sh0 a -> Full Shape Small Small (Unchecked sh0) (Unchecked sh0) a forall meas vert horiz height width a. (Measure meas, C vert, C horiz) => Full meas vert horiz height width a -> Full meas vert horiz (Unchecked height) (Unchecked width) a FullBasic.uncheck FullArray Shape Small Small sh0 sh0 a a_) (General (Unchecked sh0) (Unchecked sh1) -> General (Unchecked sh0) (Unchecked sh1) a forall sh a. (C sh, Floating a) => sh -> Vector sh a Vector.zero General (Unchecked sh0) (Unchecked sh1) shc) (Full Size Big Big (Unchecked sh1) (Unchecked sh0) -> General (Unchecked sh1) (Unchecked sh0) a forall sh a. (C sh, Floating a) => sh -> Vector sh a Vector.zero (Full Size Big Big (Unchecked sh1) (Unchecked sh0) -> General (Unchecked sh1) (Unchecked sh0) a) -> Full Size Big Big (Unchecked sh1) (Unchecked sh0) -> General (Unchecked sh1) (Unchecked sh0) a forall a b. (a -> b) -> a -> b $ General (Unchecked sh0) (Unchecked sh1) -> Full Size Big Big (Unchecked sh1) (Unchecked sh0) forall meas vert horiz height width. (Measure meas, C vert, C horiz) => Full meas vert horiz height width -> Full meas horiz vert width height Layout.inverse General (Unchecked sh0) (Unchecked sh1) shc) (FullArray Shape Small Small sh1 sh1 a -> Full Shape Small Small (Unchecked sh1) (Unchecked sh1) a forall meas vert horiz height width a. (Measure meas, C vert, C horiz) => Full meas vert horiz height width a -> Full meas vert horiz (Unchecked height) (Unchecked width) a FullBasic.uncheck FullArray Shape Small Small sh1 sh1 a b_)) FlexDiagonalP pack diag sh0 a UnpackedMatrix diag (Bands U0) (Bands U0) Shape Small Small sh0 sh0 a a FlexDiagonalP pack diag sh1 a UnpackedMatrix diag (Bands U0) (Bands U0) Shape Small Small sh1 sh1 a b split :: (Omni.TriDiag diag, Shape.C sh0, Shape.C sh1, Class.Floating a) => FlexDiagonalP pack diag (sh0::+sh1) a -> (FlexDiagonalP pack diag sh0 a, FlexDiagonalP pack diag sh1 a) split :: FlexDiagonalP pack diag (sh0 ::+ sh1) a -> (FlexDiagonalP pack diag sh0 a, FlexDiagonalP pack diag sh1 a) split FlexDiagonalP pack diag (sh0 ::+ sh1) a a = (FlexDiagonalP pack diag (sh0 ::+ sh1) a -> FlexDiagonalP pack diag sh0 a forall sh0 sh1 a pack property lower upper. (C sh0, C sh1, Floating a) => Quadratic pack property lower upper (sh0 ::+ sh1) a -> Quadratic pack property lower upper sh0 a Quad.takeTopLeft FlexDiagonalP pack diag (sh0 ::+ sh1) a a, FlexDiagonalP pack diag (sh0 ::+ sh1) a -> FlexDiagonalP pack diag sh1 a forall sh0 sh1 a pack property lower upper. (C sh0, C sh1, Floating a) => Quadratic pack property lower upper (sh0 ::+ sh1) a -> Quadratic pack property lower upper sh1 a Quad.takeBottomRight FlexDiagonalP pack diag (sh0 ::+ sh1) a a) multiply :: (Omni.TriDiag diag, Shape.C sh, Eq sh, Class.Floating a) => FlexDiagonal diag sh a -> FlexDiagonal diag sh a -> FlexDiagonal diag sh a multiply :: FlexDiagonal diag sh a -> FlexDiagonal diag sh a -> FlexDiagonal diag sh a multiply = (OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a) -> FlexDiagonal diag sh a -> FlexDiagonal diag sh a -> FlexDiagonal diag sh a forall packA propA lowerA upperA measA vertA horizA heightA widthA a packB propB lowerB upperB measB vertB horizB heightB widthB b packC propC lowerC upperC measC vertC horizC heightC widthC c. (OmniArray packA propA lowerA upperA measA vertA horizA heightA widthA a -> OmniArray packB propB lowerB upperB measB vertB horizB heightB widthB b -> OmniArray 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.liftOmni2 OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a forall sh a. (C sh, Eq sh, Floating a) => Vector sh a -> Vector sh a -> Vector sh a Vector.mul solve :: (Omni.TriDiag diag, Extent.Measure meas, Extent.C vert, Extent.C horiz, Shape.C height, Eq height, Shape.C width, Class.Floating a) => FlexDiagonal diag height a -> ArrMatrix.Full meas vert horiz height width a -> ArrMatrix.Full meas vert horiz height width a solve :: FlexDiagonal diag height a -> Full meas vert horiz height width a -> Full meas vert horiz height width a solve FlexDiagonal diag height a a = case FlexDiagonal diag height a -> DiagSingleton diag 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 ArrMatrix.diagTag FlexDiagonal diag height a a of DiagSingleton diag Omni.Arbitrary -> FlexDiagonal diag height a -> Full meas vert horiz height width a -> Full meas vert horiz height width a forall diag sub super meas vert horiz sh nrhs a. (TriDiag diag, Natural sub, Natural super, Measure meas, C vert, C horiz, C sh, Eq sh, C nrhs, Floating a) => Quadratic diag sub super sh a -> Full meas vert horiz sh nrhs a -> Full meas vert horiz sh nrhs a Banded.solve FlexDiagonal diag height a a DiagSingleton diag Omni.Unit -> \Full meas vert horiz height width a b -> if Omni Packed diag (Bands U0) (Bands U0) Shape Small Small height height -> height forall pack property lower upper sh. Omni pack property lower upper Shape Small Small sh sh -> sh Omni.squareSize (FlexDiagonal diag height a -> Omni Packed diag (Bands U0) (Bands U0) 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 FlexDiagonal diag height a a) height -> height -> Bool forall a. Eq a => a -> a -> Bool == Omni Unpacked Arbitrary Filled Filled meas vert horiz height width -> height 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 -> height Omni.height (Full meas vert horiz height width a -> Omni Unpacked Arbitrary Filled Filled 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 Full meas vert horiz height width a b) then Full meas vert horiz height width a b else [Char] -> Full meas vert horiz height width a forall a. HasCallStack => [Char] -> a error ([Char] "Diagonal.solve: height shapes mismatch") inverse :: (Omni.TriDiag diag, Shape.C sh, Class.Floating a) => FlexDiagonal diag sh a -> FlexDiagonal diag sh a inverse :: FlexDiagonal diag sh a -> FlexDiagonal diag sh a inverse FlexDiagonal diag sh a a = case FlexDiagonal diag sh a -> DiagSingleton diag 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 ArrMatrix.diagTag FlexDiagonal diag sh a a of DiagSingleton diag Omni.Unit -> FlexDiagonal diag sh a a DiagSingleton diag Omni.Arbitrary -> (OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a) -> FlexDiagonal diag sh a -> FlexDiagonal diag sh a forall packA propA lowerA upperA measA vertA horizA heightA widthA a packB propB lowerB upperB measB vertB horizB heightB widthB b. (OmniArray packA propA lowerA upperA measA vertA horizA heightA widthA a -> OmniArray 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.liftOmni1 OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a -> OmniArray Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh a forall sh a. (C sh, Floating a) => Vector sh a -> Vector sh a Vector.recip FlexDiagonal diag sh a a determinant :: (Omni.TriDiag diag, Shape.C sh, Class.Floating a) => FlexDiagonal diag sh a -> a determinant :: FlexDiagonal diag sh a -> a determinant FlexDiagonal diag sh a a = case FlexDiagonal diag sh a -> DiagSingleton diag 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 ArrMatrix.diagTag FlexDiagonal diag sh a a of DiagSingleton diag Omni.Unit -> a forall a. Floating a => a Scalar.one DiagSingleton diag Omni.Arbitrary -> Vector (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a -> a forall sh a. (C sh, Floating a) => Vector sh a -> a Vector.product (Vector (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a -> a) -> Vector (Omni Packed diag (Bands U0) (Bands U0) Shape Small Small sh sh) a -> a forall a b. (a -> b) -> a -> b $ FlexDiagonal diag sh a -> Vector (Omni Packed diag (Bands U0) (Bands U0) 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 FlexDiagonal diag sh a a