Safe Haskell | None |
---|
- type General height width = Full Big Big height width
- type Tall height width = Full Big Small height width
- type Wide height width = Full Small Big height width
- type Square size = Full Small Small size size
- data Full vert horiz height width = Full {
- fullOrder :: Order
- fullExtent :: Extent vert horiz height width
- fullHeight :: (C vert, C horiz) => Full vert horiz height width -> height
- fullWidth :: (C vert, C horiz) => Full vert horiz height width -> width
- data Order
- = RowMajor
- | ColumnMajor
- flipOrder :: Order -> Order
- general :: Order -> height -> width -> General height width
- square :: Order -> sh -> Square sh
- wide :: (C height, C width) => Order -> height -> width -> Wide height width
- tall :: (C height, C width) => Order -> height -> width -> Tall height width
- data Split lower vert horiz height width
- type SplitGeneral lower height width = Split lower Big Big height width
- data Triangle = Triangle
- data Reflector = Reflector
- splitGeneral :: lower -> Order -> height -> width -> SplitGeneral lower height width
- splitFromFull :: lower -> Full vert horiz height width -> Split lower vert horiz height width
- data Hermitian size = Hermitian {
- hermitianOrder :: Order
- hermitianSize :: size
- hermitian :: Order -> size -> Hermitian size
- data Triangular lo diag up size = Triangular {
- triangularDiag :: diag
- triangularUplo :: (lo, up)
- triangularOrder :: Order
- triangularSize :: size
- type Identity = Triangular Empty Unit Empty
- type Diagonal = Triangular Empty NonUnit Empty
- type LowerTriangular diag = Triangular Filled diag Empty
- type UpperTriangular diag = Triangular Empty diag Filled
- type Symmetric = FlexSymmetric NonUnit
- diagonal :: Order -> size -> Triangular Empty NonUnit Empty size
- lowerTriangular :: Order -> size -> LowerTriangular NonUnit size
- upperTriangular :: Order -> size -> UpperTriangular NonUnit size
- symmetric :: Order -> size -> Symmetric size
- autoDiag :: TriDiag diag => diag
- autoUplo :: (Content lo, Content up) => (lo, up)
- type DiagUpLo lo up = (DiagUpLoC lo up, DiagUpLoC up lo)
- data Unit = Unit
- data NonUnit = NonUnit
- data Banded sub super vert horiz height width = Banded {
- bandedOffDiagonals :: (UnaryProxy sub, UnaryProxy super)
- bandedOrder :: Order
- bandedExtent :: Extent vert horiz height width
- type BandedGeneral sub super = Banded sub super Big Big
- type BandedSquare sub super size = Banded sub super Small Small size size
- type BandedLowerTriangular sub size = BandedSquare sub U0 size
- type BandedUpperTriangular super size = BandedSquare U0 super size
- type BandedDiagonal size = BandedSquare U0 U0 size
- data BandedIndex row column
- = InsideBox row column
- | VertOutsideBox Int column
- | HorizOutsideBox row Int
- bandedGeneral :: (UnaryProxy sub, UnaryProxy super) -> Order -> height -> width -> Banded sub super Big Big height width
- bandedSquare :: (UnaryProxy sub, UnaryProxy super) -> Order -> size -> Banded sub super Small Small size size
- bandedFromFull :: (UnaryProxy sub, UnaryProxy super) -> Full vert horiz height width -> Banded sub super vert horiz height width
- type UnaryProxy a = Proxy (Un a)
- addOffDiagonals :: (Natural subA, Natural superA, Natural subB, Natural superB, (subA :+: subB) ~ subC, (superA :+: superB) ~ superC) => (UnaryProxy subA, UnaryProxy superA) -> (UnaryProxy subB, UnaryProxy superB) -> ((Nat subC, Nat superC), (UnaryProxy subC, UnaryProxy superC))
- class TriDiag diag where
- switchTriDiag :: f Unit -> f NonUnit -> f diag
- class Content c
- data BandedHermitian off size = BandedHermitian {}
- bandedHermitian :: UnaryProxy off -> Order -> size -> BandedHermitian off size
Documentation
data Full vert horiz height width Source
Full | |
|
(C vert, C horiz, C size, ~ * size height, Eq height, C width) => Multiply (Hermitian size) (Full vert horiz height width) | |
(Natural offDiag, C vert, C horiz, C size, ~ * size height, Eq height, C width, Eq width) => Multiply (BandedHermitian offDiag size) (Full vert horiz height width) | |
(Eq height, Eq width, C vert, C horiz) => Eq (Full vert horiz height width) | |
(Show height, Show width, C vert, C horiz) => Show (Full vert horiz height width) | |
(C vert, C horiz, C height, C width) => C (Full vert horiz height width) | |
(C vert, C horiz, Indexed height, Indexed width) => Indexed (Full vert horiz height width) | |
(C vert, C horiz, InvIndexed height, InvIndexed width) => InvIndexed (Full vert horiz height width) | |
(C vert, C horiz, NFData height, NFData width) => NFData (Full vert horiz height width) | |
(C vert, C horiz, C height, C width) => FormatArray (Full vert horiz height width) | |
(C vert, C horiz, Eq height, C width, C height) => MultiplyLeft (Full vert horiz height width) | |
(C vert, C horiz, Eq width, C width, C height) => MultiplyRight (Full vert horiz height width) | |
(~ * vert Small, ~ * horiz Small, C width, C height, ~ * height width) => Inverse (Full vert horiz height width) | |
(~ * vert Small, ~ * horiz Small, C width, C height, ~ * height width) => Solve (Full vert horiz height width) | |
(C vert, C horiz, C size, ~ * size width, Eq width, C height) => Multiply (Full vert horiz height width) (Hermitian size) | |
(Natural offDiag, C vert, C horiz, C size, ~ * size width, Eq width, C height, Eq height) => Multiply (Full vert horiz height width) (BandedHermitian offDiag size) | |
(Content lo, Content up, TriDiag diag, C vert, C horiz, C size, ~ * size height, Eq height, C width) => Multiply (Triangular lo diag up size) (Full vert horiz height width) | |
(Content lo, Content up, TriDiag diag, C vert, C horiz, C size, ~ * size width, Eq width, C height) => Multiply (Full vert horiz height width) (Triangular lo diag up size) | |
(C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB, C vertA, C horizA, C vertB, C horizB) => Multiply (Full vertA horizA heightA widthA) (Full vertB horizB heightB widthB) | |
(Natural sub, Natural super, C vertA, C horizA, C vertB, C horizB, C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB) => Multiply (Full vertA horizA heightA widthA) (Banded sub super vertB horizB heightB widthB) | |
(Natural sub, Natural super, C vertA, C horizA, C vertB, C horizB, C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB) => Multiply (Banded sub super vertA horizA heightA widthA) (Full vertB horizB heightB widthB) |
fullHeight :: (C vert, C horiz) => Full vert horiz height width -> heightSource
data Split lower vert horiz height width Source
(Eq lower, Eq height, Eq width, C vert, C horiz) => Eq (Split lower vert horiz height width) | |
(Show lower, Show height, Show width, C vert, C horiz) => Show (Split lower vert horiz height width) | |
(Eq lower, C vert, C horiz, C height, C width) => C (Split lower vert horiz height width) | |
(Eq lower, C vert, C horiz, Indexed height, Indexed width) => Indexed (Split lower vert horiz height width) | |
(Eq lower, C vert, C horiz, InvIndexed height, InvIndexed width) => InvIndexed (Split lower vert horiz height width) | |
(NFData lower, C vert, C horiz, NFData height, NFData width) => NFData (Split lower vert horiz height width) | |
(Eq lower, C vert, C horiz, C height, C width) => FormatArray (Split lower vert horiz height width) |
type SplitGeneral lower height width = Split lower Big Big height widthSource
splitGeneral :: lower -> Order -> height -> width -> SplitGeneral lower height widthSource
splitFromFull :: lower -> Full vert horiz height width -> Split lower vert horiz height widthSource
Store the upper triangular half of a real symmetric or complex Hermitian matrix.
Hermitian | |
|
Eq size => Eq (Hermitian size) | |
Show size => Show (Hermitian size) | |
C size => C (Hermitian size) | |
Indexed size => Indexed (Hermitian size) | |
InvIndexed size => InvIndexed (Hermitian size) | |
NFData size => NFData (Hermitian size) | |
C size => FormatArray (Hermitian size) | |
(Eq shape, C shape) => MultiplyLeft (Hermitian shape) | |
(Eq shape, C shape) => MultiplyRight (Hermitian shape) | |
C shape => Inverse (Hermitian shape) | |
C shape => Solve (Hermitian shape) | |
(C shapeA, ~ * shapeA shapeB, Eq shapeB) => Multiply (Hermitian shapeA) (Hermitian shapeB) | |
(C vert, C horiz, C size, ~ * size height, Eq height, C width) => Multiply (Hermitian size) (Full vert horiz height width) | |
(C vert, C horiz, C size, ~ * size width, Eq width, C height) => Multiply (Full vert horiz height width) (Hermitian size) |
data Triangular lo diag up size Source
Triangular | |
|
(Eq lo, Eq diag, Eq up, Eq size) => Eq (Triangular lo diag up size) | |
(Show lo, Show diag, Show up, Show size) => Show (Triangular lo diag up size) | |
(Content lo, TriDiag diag, Content up, C size) => C (Triangular lo diag up size) | |
(Content lo, TriDiag diag, Content up, Indexed size) => Indexed (Triangular lo diag up size) | |
(Content lo, TriDiag diag, Content up, InvIndexed size) => InvIndexed (Triangular lo diag up size) | |
(Content lo, TriDiag diag, Content up, NFData size) => NFData (Triangular lo diag up size) | |
(Content lo, Content up, TriDiag diag, C size) => FormatArray (Triangular lo diag up size) | |
(Content lo, Content up, TriDiag diag, Eq shape, C shape) => MultiplyLeft (Triangular lo diag up shape) | |
(Content lo, Content up, TriDiag diag, Eq shape, C shape) => MultiplyRight (Triangular lo diag up shape) | |
(DiagUpLo lo up, TriDiag diag, C shape) => Inverse (Triangular lo diag up shape) | |
(Content lo, Content up, TriDiag diag, C shape) => Solve (Triangular lo diag up shape) | |
(C sizeA, ~ * sizeA sizeB, Eq sizeB, MultiplyTriangular loA upA loB upB, TriDiag diagA, TriDiag diagB) => Multiply (Triangular loA diagA upA sizeA) (Triangular loB diagB upB sizeB) | |
(Content lo, Content up, TriDiag diag, C vert, C horiz, C size, ~ * size height, Eq height, C width) => Multiply (Triangular lo diag up size) (Full vert horiz height width) | |
(Content lo, Content up, TriDiag diag, C vert, C horiz, C size, ~ * size width, Eq width, C height) => Multiply (Full vert horiz height width) (Triangular lo diag up size) |
type Identity = Triangular Empty Unit EmptySource
type Diagonal = Triangular Empty NonUnit EmptySource
type LowerTriangular diag = Triangular Filled diag EmptySource
type UpperTriangular diag = Triangular Empty diag FilledSource
diagonal :: Order -> size -> Triangular Empty NonUnit Empty sizeSource
lowerTriangular :: Order -> size -> LowerTriangular NonUnit sizeSource
upperTriangular :: Order -> size -> UpperTriangular NonUnit sizeSource
data Banded sub super vert horiz height width Source
Banded | |
|
(Natural offDiag, Natural sub, Natural super, C vert, C horiz, C size, ~ * size height, Eq height, C width, Eq width) => Multiply (BandedHermitian offDiag size) (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vertA, C horizA, C vertB, C horizB, C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB) => Multiply (Full vertA horizA heightA widthA) (Banded sub super vertB horizB heightB widthB) | |
(Eq height, Eq width, C vert, C horiz) => Eq (Banded sub super vert horiz height width) | |
(Show height, Show width, Natural sub, Natural super, C vert, C horiz) => Show (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, C height, C width) => C (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, Indexed height, Indexed width) => Indexed (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, InvIndexed height, InvIndexed width) => InvIndexed (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, NFData height, NFData width) => NFData (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, C height, C width) => FormatArray (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, Eq height, C width, C height) => MultiplyLeft (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, C vert, C horiz, Eq width, C width, C height) => MultiplyRight (Banded sub super vert horiz height width) | |
(Natural sub, Natural super, ~ * vert Small, ~ * horiz Small, C width, C height, ~ * width height) => Solve (Banded sub super vert horiz height width) | |
(Natural offDiag, Natural sub, Natural super, C vert, C horiz, C size, ~ * size width, Eq width, C height, Eq height) => Multiply (Banded sub super vert horiz height width) (BandedHermitian offDiag size) | |
(Natural sub, Natural super, C vertA, C horizA, C vertB, C horizB, C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB) => Multiply (Banded sub super vertA horizA heightA widthA) (Full vertB horizB heightB widthB) | |
(Natural subA, Natural superA, Natural subB, Natural superB, C vertA, C horizA, C vertB, C horizB, C heightA, C widthA, C widthB, ~ * widthA heightB, Eq heightB) => Multiply (Banded subA superA vertA horizA heightA widthA) (Banded subB superB vertB horizB heightB widthB) |
type BandedGeneral sub super = Banded sub super Big BigSource
type BandedSquare sub super size = Banded sub super Small Small size sizeSource
type BandedLowerTriangular sub size = BandedSquare sub U0 sizeSource
type BandedUpperTriangular super size = BandedSquare U0 super sizeSource
type BandedDiagonal size = BandedSquare U0 U0 sizeSource
data BandedIndex row column Source
InsideBox row column | |
VertOutsideBox Int column | |
HorizOutsideBox row Int |
(Eq row, Eq column) => Eq (BandedIndex row column) | |
(Show row, Show column) => Show (BandedIndex row column) |
bandedGeneral :: (UnaryProxy sub, UnaryProxy super) -> Order -> height -> width -> Banded sub super Big Big height widthSource
bandedSquare :: (UnaryProxy sub, UnaryProxy super) -> Order -> size -> Banded sub super Small Small size sizeSource
bandedFromFull :: (UnaryProxy sub, UnaryProxy super) -> Full vert horiz height width -> Banded sub super vert horiz height widthSource
type UnaryProxy a = Proxy (Un a)Source
addOffDiagonals :: (Natural subA, Natural superA, Natural subB, Natural superB, (subA :+: subB) ~ subC, (superA :+: superB) ~ superC) => (UnaryProxy subA, UnaryProxy superA) -> (UnaryProxy subB, UnaryProxy superB) -> ((Nat subC, Nat superC), (UnaryProxy subC, UnaryProxy superC))Source
data BandedHermitian off size Source
BandedHermitian | |
|
Eq size => Eq (BandedHermitian off size) | |
(Show size, Natural off) => Show (BandedHermitian off size) | |
(Natural off, C size) => C (BandedHermitian off size) | |
(Natural off, Indexed size) => Indexed (BandedHermitian off size) | |
(Natural off, InvIndexed size) => InvIndexed (BandedHermitian off size) | |
(Natural off, NFData size) => NFData (BandedHermitian off size) | |
(Natural offDiag, C size) => FormatArray (BandedHermitian offDiag size) | |
(Natural offDiag, C size, Eq size) => MultiplyLeft (BandedHermitian offDiag size) | |
(Natural offDiag, C size, Eq size) => MultiplyRight (BandedHermitian offDiag size) | |
(Natural offDiag, C size) => Solve (BandedHermitian offDiag size) | There is no solver for indefinite matrices. Thus the instance will fail for indefinite but solvable systems. |
(Natural offDiagA, Natural offDiagB, C sizeA, ~ * sizeA sizeB, C sizeB, Eq sizeB) => Multiply (BandedHermitian offDiagA sizeA) (BandedHermitian offDiagB sizeB) | |
(Natural offDiag, C vert, C horiz, C size, ~ * size height, Eq height, C width, Eq width) => Multiply (BandedHermitian offDiag size) (Full vert horiz height width) | |
(Natural offDiag, Natural sub, Natural super, C vert, C horiz, C size, ~ * size height, Eq height, C width, Eq width) => Multiply (BandedHermitian offDiag size) (Banded sub super vert horiz height width) | |
(Natural offDiag, C vert, C horiz, C size, ~ * size width, Eq width, C height, Eq height) => Multiply (Full vert horiz height width) (BandedHermitian offDiag size) | |
(Natural offDiag, Natural sub, Natural super, C vert, C horiz, C size, ~ * size width, Eq width, C height, Eq height) => Multiply (Banded sub super vert horiz height width) (BandedHermitian offDiag size) |
bandedHermitian :: UnaryProxy off -> Order -> size -> BandedHermitian off sizeSource