subhask-0.1.0.1: Type safe interface for programming in subcategories of Hask

Safe HaskellNone
LanguageHaskell2010

SubHask.Algebra.Vector

Contents

Description

Dense vectors and linear algebra operations.

NOTE: This module is a prototype for what a more fully featured linear algebra module might look like. There are a number of efficiency related features that are missing. In particular, matrices will get copied more often than they need to, and only the most naive dense matrix format is currently supported. These limitations are due to using "hmatrix" as a backend (all operations should be at least as fast as in hmatrix). Future iterations will use something like "hblas" to get finer lever control.

FIXME: Shouldn't expose the constructors, but they're needed for the SubHask.Algebra.Array types.

FIXME: We shouldn't need to call out to the FFI in order to get SIMD instructions.

Synopsis

Documentation

data family SVector n r Source

The type of dynamic or statically sized vectors implemented using the FFI.

Instances

MatrixField r => Normed ((+>) (SVector k m r) (SVector k n r)) Source 
(Show r, ValidSVector Nat n r, KnownNat n) => Show (SVector Nat n r) Source 
(Show r, Monoid r, ValidSVector Symbol n r) => Show (SVector Symbol n r) Source 
(KnownNat n, Arbitrary r, ValidSVector Nat n r, FreeModule r, IsScalar r) => Arbitrary (SVector Nat n r) Source 
(Arbitrary r, ValidSVector Symbol n r, FreeModule r, IsScalar r) => Arbitrary (SVector Symbol n r) Source 
(FromField r, ValidSVector Symbol n r, IsScalar r, FreeModule r) => FromRecord (SVector Symbol n r) Source 
(NFData r, ValidSVector Nat n r) => NFData (SVector Nat n r) Source 
(NFData r, ValidSVector Symbol n r) => NFData (SVector Symbol n r) Source 
(KnownNat n, ValidSVector Nat n r) => IsMutable (SVector Nat n r) Source 
ValidSVector Symbol n r => IsMutable (SVector Symbol n r) Source 
(KnownNat n, Monoid r, ValidLogic r, ValidSVector Nat n r, IsScalar r, FreeModule r) => IxContainer (SVector Nat n r) Source 
(Monoid r, ValidLogic r, ValidSVector Symbol n r, IsScalar r, FreeModule r) => IxContainer (SVector Symbol n r) Source 
(KnownNat n, ValidSVector Nat n r, ExpField r, Normed r, Ord_ r, (~) * (Logic r) Bool, IsScalar r, VectorSpace r, ValidSVector Symbol "dyn" r) => Metric (SVector Nat n r) Source 
(ValidSVector Symbol n r, ExpField r, Normed r, Ord_ r, (~) * (Logic r) Bool, IsScalar r, VectorSpace r) => Metric (SVector Symbol n r) Source 
(FiniteModule (SVector k n r), VectorSpace (SVector k n r), MatrixField r, ToFromVector (SVector k n r)) => TensorAlgebra (SVector k n r) Source 
(KnownNat n, VectorSpace r, ValidSVector Nat n r, IsScalar r, ExpField r, Real r, OrdField r, MatrixField r, ValidSVector Nat n r, ValidSVector Symbol "dyn" r) => Hilbert (SVector Nat n r) Source 
(VectorSpace r, ValidSVector Symbol n r, IsScalar r, ExpField r, Real r, OrdField r, MatrixField r) => Hilbert (SVector Symbol n r) Source 
(KnownNat n, VectorSpace r, ValidSVector Nat n r, IsScalar r, ExpField r, Real r, ValidSVector Nat n r, ValidSVector Symbol "dyn" r) => Banach (SVector Nat n r) Source 
(VectorSpace r, ValidSVector Symbol n r, IsScalar r, ExpField r, Real r) => Banach (SVector Symbol n r) Source 
(KnownNat n, VectorSpace r, ValidSVector Nat n r, IsScalar r) => VectorSpace (SVector Nat n r) Source 
(VectorSpace r, ValidSVector Symbol n r, IsScalar r) => VectorSpace (SVector Symbol n r) Source 
(KnownNat n, FreeModule r, ValidLogic r, ValidSVector Nat n r, IsScalar r) => FiniteModule (SVector Nat n r) Source 
(FreeModule r, ValidLogic r, ValidSVector Symbol n r, IsScalar r) => FiniteModule (SVector Symbol n r) Source 
(KnownNat n, FreeModule r, ValidSVector Nat n r, IsScalar r) => FreeModule (SVector Nat n r) Source 
(FreeModule r, ValidSVector Symbol n r, IsScalar r) => FreeModule (SVector Symbol n r) Source 
(KnownNat n, Module r, ValidSVector Nat n r, IsScalar r) => Module (SVector Nat n r) Source 
(Module r, ValidSVector Symbol n r, IsScalar r) => Module (SVector Symbol n r) Source 
(KnownNat n, VectorSpace r, ValidSVector Nat n r, IsScalar r, ExpField r) => Normed (SVector Nat n r) Source 
(VectorSpace r, ValidSVector Symbol n r, IsScalar r, ExpField r) => Normed (SVector Symbol n r) Source 
(KnownNat n, Abelian r, ValidSVector Nat n r) => Abelian (SVector Nat n r) Source 
(Monoid r, Abelian r, ValidSVector Symbol n r) => Abelian (SVector Symbol n r) Source 
(KnownNat n, Group r, ValidSVector Nat n r) => Group (SVector Nat n r) Source 
(Group r, ValidSVector Symbol n r) => Group (SVector Symbol n r) Source 
(KnownNat n, Cancellative r, ValidSVector Nat n r) => Cancellative (SVector Nat n r) Source 
(Monoid r, Cancellative r, ValidSVector Symbol n r) => Cancellative (SVector Symbol n r) Source 
(KnownNat n, Monoid r, ValidSVector Nat n r) => Monoid (SVector Nat n r) Source 
(Monoid r, ValidSVector Symbol n r) => Monoid (SVector Symbol n r) Source 
(KnownNat n, Semigroup r, ValidSVector Nat n r) => Semigroup (SVector Nat n r) Source 
(Monoid r, ValidSVector Symbol n r) => Semigroup (SVector Symbol n r) Source 
(KnownNat n, Eq_ r, ValidLogic r, ValidSVector Nat n r) => Eq_ (SVector Nat n r) Source 
(Eq r, Monoid r, ValidSVector Symbol n r) => Eq_ (SVector Symbol n r) Source 
data SVector Nat = SVector_Nat (ForeignPtr r) Source 
data SVector Symbol = SVector_Dynamic !(ForeignPtr r) !Int !Int Source 
type (><) * * (SVector k m a) b Source 
data Mutable m (SVector Nat n r) = Mutable_SVector_Nat (ForeignPtr r) Source 
data Mutable m (SVector Symbol n r) = Mutable_SVector (PrimRef m (SVector Symbol n r)) Source 
type Index (SVector k n r) = Int Source 
type Elem (SVector k n r) = Scalar r Source 
type Scalar (SVector k n r) = Scalar r Source 
type Logic (SVector k n r) = Logic r Source 
type ValidElem (SVector Nat n r) e Source 
type ValidElem (SVector Symbol n r) e Source 
type SetElem (SVector k n r) b = SVector k n b Source 

data family UVector n r Source

The type of dynamic or statically sized vectors implemented using the FFI.

Instances

(ClassicalLogic r, Eq_ r, Unbox r, Prim r, FreeModule r, IsScalar r, Prim y, Unbox y) => Constructible (UArray (Labeled' (UVector Symbol s r) y)) Source 
(ClassicalLogic r, Eq_ r, Unbox r, Prim r, FreeModule r, IsScalar r) => Constructible (UArray (UVector Symbol s r)) Source 
(ClassicalLogic r, Eq_ r, Unbox r, Prim r, FreeModule r, IsScalar r, Prim y, Unbox y) => Monoid (UArray (Labeled' (UVector Symbol s r) y)) Source 
(ClassicalLogic r, Eq_ r, Unbox r, Prim r, FreeModule r, IsScalar r) => Monoid (UArray (UVector Symbol s r)) Source 
(Show r, Monoid r, Prim r) => Show (UVector Symbol n r) Source 
(Arbitrary r, Prim r, FreeModule r, IsScalar r) => Arbitrary (UVector Symbol n r) Source 
(FromField r, Prim r, IsScalar r, FreeModule r) => FromRecord (UVector Symbol n r) Source 
(NFData r, Prim r) => NFData (UVector Symbol n r) Source 
Prim r => IsMutable (UVector Symbol n r) Source 
(Monoid r, ValidLogic r, Prim r, IsScalar r) => IxContainer (UVector Symbol n r) Source 
(Prim r, ExpField r, Normed r, Ord_ r, (~) * (Logic r) Bool, IsScalar r, VectorSpace r) => Metric (UVector Symbol n r) Source 
(VectorSpace r, Prim r) => VectorSpace (UVector Symbol n r) Source 
(FreeModule r, ValidLogic r, Prim r, IsScalar r) => FiniteModule (UVector Symbol n r) Source 
(FreeModule r, Prim r) => FreeModule (UVector Symbol n r) Source 
(Module r, Prim r) => Module (UVector Symbol n r) Source 
(VectorSpace r, Prim r, IsScalar r, ExpField r) => Normed (UVector Symbol n r) Source 
(Monoid r, Abelian r, Prim r) => Abelian (UVector Symbol n r) Source 
(Group r, Prim r) => Group (UVector Symbol n r) Source 
(Monoid r, Cancellative r, Prim r) => Cancellative (UVector Symbol n r) Source 
(Monoid r, Prim r) => Monoid (UVector Symbol n r) Source 
(Monoid r, Prim r) => Semigroup (UVector Symbol n r) Source 
(Eq r, Monoid r, Prim r) => Eq_ (UVector Symbol n r) Source 
data UVector Symbol = UVector_Dynamic !ByteArray !Int !Int Source 
type (><) * k (UVector k1 n r) a = UVector k1 n ((><) * k r a) Source 
data MVector s (Labeled' (UVector Symbol n elem) y) = UArray_Labeled'_MUVector !(MutableByteArray s) !Int !Int !Int 
data MVector s (UVector Symbol n elem) = UArray_MUVector !(MutableByteArray s) !Int !Int !Int 
data Mutable m (UVector Symbol n r) = Mutable_UVector (PrimRef m (UVector Symbol n r)) Source 
data Vector (Labeled' (UVector Symbol n elem) y) = UArray_Labeled'_UVector !ByteArray !Int !Int !Int 
data Vector (UVector Symbol n elem) = UArray_UVector !ByteArray !Int !Int !Int 
type Index (UVector k n r) = Int Source 
type Elem (UVector k n r) = Scalar r Source 
type Scalar (UVector k n r) = Scalar r Source 
type Logic (UVector k n r) = Logic r Source 
type ValidElem (UVector Symbol n r) e = () 
type SetElem (UVector k n r) b = UVector k n b Source 

data a +> b Source

Instances

Dagger * (+>) Source 
Groupoid * (+>) Source 
Category * (+>) Source 
(MatrixField (Scalar b), Show (Scalar b)) => Show ((+>) a b) Source 
IsMutable ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => VectorSpace ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => FreeModule ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => Module ((+>) a b) Source 
MatrixField r => Normed ((+>) (SVector k m r) (SVector k n r)) Source 
VectorSpace a => Field ((+>) a a) Source 
VectorSpace a => Ring ((+>) a a) Source 
VectorSpace a => Rig ((+>) a a) Source 
VectorSpace a => Rg ((+>) a a) Source 
Abelian ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => Group ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => Cancellative ((+>) a b) Source 
(VectorSpace a, VectorSpace b) => Monoid ((+>) a b) Source 
Semigroup ((+>) a b) Source 
(<:) (* -> * -> *) (+>) (->) Source 
Sup (* -> * -> *) (->) (+>) (->) Source 
Sup (* -> * -> *) (+>) (->) (->) Source 
type ValidCategory * (+>) a Source 
type (><) * k ((+>) a b) c Source 
data Mutable m ((+>) a0 b0) = Mutable_AppT__AppT__ConT_SubHask_Algebra_Vector______VarT_a_1627750060____VarT_b_1627750061_ (PrimRef m ((+>) a b)) Source 
type Scalar ((+>) a b) = Scalar b Source 
type Logic ((+>) a b) = Bool Source 

type SMatrix r m n = SVector m r +> SVector n r Source

A slightly more convenient type for linear functions between SVectors

unsafeMkSMatrix :: (VectorSpace (SVector m r), VectorSpace (SVector n r), ToFromVector (SVector m r), ToFromVector (SVector n r), MatrixField r) => Int -> Int -> [r] -> SMatrix r m n Source

Construct an SMatrix

FFI

Debug