linearmap-category-0.6.0.1: Native, complete-ish, matrix-free linear algebra.
Copyright(c) Justus Sagemüller 2022
LicenseGPL v3
Maintainer(@) jsag $ hvl.no
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Math.VectorSpace.DimensionAware

Description

 
Synopsis

Documentation

data DimensionalityWitness v where Source #

Low-level case distinction between spaces with a dimension that is both fixed and low enough that it makes sense to treat it this way, and more general spaces where this is not feasible.

Use this type only when defining instances of DimensionAware. When making decisions based on dimensionality, DimensionalityCases is more convenient.

class VectorSpace v => DimensionAware v where Source #

This class does not really pose any restrictions on a vector space type, but allows it to express its dimension. This is for optimisation purposes only, specifically to allow low-dimensional vectors to be represented efficiently in unboxed arrays / matrices.

Associated Types

type StaticDimension v :: Maybe Nat Source #

If this is Nothing, it can mean the dimension is infinite, or just big, or simply unknown / not considered in the implementation.

Instances

Instances details
DimensionAware Integer Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension Integer :: Maybe Nat Source #

DimensionAware Double Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension Double :: Maybe Nat Source #

DimensionAware Float Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension Float :: Maybe Nat Source #

DimensionAware Int Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension Int :: Maybe Nat Source #

Integral n => DimensionAware (Ratio n) Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension (Ratio n) :: Maybe Nat Source #

(Num' n, Unbox n) => DimensionAware (FinSuppSeq n) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (FinSuppSeq n) :: Maybe Nat Source #

(Num' n, Unbox n) => DimensionAware (Sequence n) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (Sequence n) :: Maybe Nat Source #

(Num' s, Eq s) => DimensionAware (V0 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (V0 s) :: Maybe Nat Source #

(Num' s, Eq s) => DimensionAware (V1 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (V1 s) :: Maybe Nat Source #

(Num' s, Eq s) => DimensionAware (V2 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (V2 s) :: Maybe Nat Source #

(Num' s, Eq s) => DimensionAware (V3 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (V3 s) :: Maybe Nat Source #

(Num' s, Eq s) => DimensionAware (V4 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (V4 s) :: Maybe Nat Source #

(Semimanifold m, DimensionAware (Needle (VRep m)), Scalar (Needle m) ~ Scalar (Needle (VRep m))) => DimensionAware (GenericNeedle m) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (GenericNeedle m) :: Maybe Nat Source #

DimensionAware (ZeroDim s) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (ZeroDim s) :: Maybe Nat Source #

(Num' s, TensorSpace v, Scalar v ~ s) => DimensionAware (SymmetricTensor s v) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Associated Types

type StaticDimension (SymmetricTensor s v) :: Maybe Nat Source #

(DimensionAware u, DimensionAware v, Scalar u ~ Scalar v) => DimensionAware (u, v) Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Associated Types

type StaticDimension (u, v) :: Maybe Nat Source #

DimensionAware v => DimensionAware (Rec0 v s) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (Rec0 v s) :: Maybe Nat Source #

(LinearSpace u, LinearSpace v, DimensionAware u, DimensionAware v, Scalar u ~ s, Scalar v ~ s) => DimensionAware (LinearFunction s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (LinearFunction s u v) :: Maybe Nat Source #

(LinearSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s) => DimensionAware (LinearMap s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (LinearMap s u v) :: Maybe Nat Source #

(TensorSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s) => DimensionAware (Tensor s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (Tensor s u v) :: Maybe Nat Source #

(DimensionAware (f p), DimensionAware (g p), Scalar (f p) ~ Scalar (g p)) => DimensionAware ((f :*: g) p) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension ((f :*: g) p) :: Maybe Nat Source #

DimensionAware (f p) => DimensionAware (M1 i c f p) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Associated Types

type StaticDimension (M1 i c f p) :: Maybe Nat Source #

class (DimensionAware v, StaticDimension v ~ 'Just n) => Dimensional n v | v -> n where Source #

Methods

knownDimensionalitySing :: Sing n Source #

unsafeFromArrayWithOffset :: Vector α (Scalar v) => Int -> α (Scalar v) -> v Source #

Read basis expansion from an array, starting at the specified offset. The array must have at least length n + offset, else the behaviour is undefined.

unsafeWriteArrayWithOffset :: Vector α (Scalar v) => Mutable α σ (Scalar v) -> Int -> v -> ST σ () Source #

Instances

Instances details
Dimensional 1 Integer Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Dimensional 1 Double Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Dimensional 1 Float Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Dimensional 1 Int Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

(Semimanifold m, Dimensional n (Needle (VRep m)), Scalar (Needle m) ~ Scalar (Needle (VRep m))) => Dimensional n (GenericNeedle m) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

(Num' s, Eq s) => Dimensional 0 (V0 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Methods

knownDimensionalitySing :: Sing 0 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (V0 s)) => Int -> α (Scalar (V0 s)) -> V0 s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (V0 s)) => Mutable α σ (Scalar (V0 s)) -> Int -> V0 s -> ST σ () Source #

Dimensional 0 (ZeroDim s) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing 0 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (ZeroDim s)) => Int -> α (Scalar (ZeroDim s)) -> ZeroDim s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (ZeroDim s)) => Mutable α σ (Scalar (ZeroDim s)) -> Int -> ZeroDim s -> ST σ () Source #

Integral n => Dimensional 1 (Ratio n) Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Methods

knownDimensionalitySing :: Sing 1 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (Ratio n)) => Int -> α (Scalar (Ratio n)) -> Ratio n Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (Ratio n)) => Mutable α σ (Scalar (Ratio n)) -> Int -> Ratio n -> ST σ () Source #

(Num' s, Eq s) => Dimensional 1 (V1 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Methods

knownDimensionalitySing :: Sing 1 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (V1 s)) => Int -> α (Scalar (V1 s)) -> V1 s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (V1 s)) => Mutable α σ (Scalar (V1 s)) -> Int -> V1 s -> ST σ () Source #

(Num' s, Eq s) => Dimensional 2 (V2 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Methods

knownDimensionalitySing :: Sing 2 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (V2 s)) => Int -> α (Scalar (V2 s)) -> V2 s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (V2 s)) => Mutable α σ (Scalar (V2 s)) -> Int -> V2 s -> ST σ () Source #

(Num' s, Eq s) => Dimensional 3 (V3 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Methods

knownDimensionalitySing :: Sing 3 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (V3 s)) => Int -> α (Scalar (V3 s)) -> V3 s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (V3 s)) => Mutable α σ (Scalar (V3 s)) -> Int -> V3 s -> ST σ () Source #

(Num' s, Eq s) => Dimensional 4 (V4 s) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

Methods

knownDimensionalitySing :: Sing 4 Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (V4 s)) => Int -> α (Scalar (V4 s)) -> V4 s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (V4 s)) => Mutable α σ (Scalar (V4 s)) -> Int -> V4 s -> ST σ () Source #

(Num' s, Dimensional n v, TensorSpace v, Scalar v ~ s, m ~ TriangularNum n) => Dimensional m (SymmetricTensor s v) Source # 
Instance details

Defined in Math.LinearMap.Category.Instances

(Dimensional n u, Dimensional m v, Scalar u ~ Scalar v, nm ~ (n + m)) => Dimensional nm (u, v) Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Methods

knownDimensionalitySing :: Sing nm Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (u, v)) => Int -> α (Scalar (u, v)) -> (u, v) Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (u, v)) => Mutable α σ (Scalar (u, v)) -> Int -> (u, v) -> ST σ () Source #

Dimensional n v => Dimensional n (Rec0 v s) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing n Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (Rec0 v s)) => Int -> α (Scalar (Rec0 v s)) -> Rec0 v s Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (Rec0 v s)) => Mutable α σ (Scalar (Rec0 v s)) -> Int -> Rec0 v s -> ST σ () Source #

(Dimensional n u, Dimensional m v, LinearSpace u, LinearSpace v, Scalar u ~ s, Scalar v ~ s, nm ~ (n * m)) => Dimensional nm (LinearFunction s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

(Dimensional n u, Dimensional m v, LinearSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s, nm ~ (n * m)) => Dimensional nm (LinearMap s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing nm Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (LinearMap s u v)) => Int -> α (Scalar (LinearMap s u v)) -> LinearMap s u v Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (LinearMap s u v)) => Mutable α σ (Scalar (LinearMap s u v)) -> Int -> LinearMap s u v -> ST σ () Source #

(Dimensional n u, Dimensional m v, TensorSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s, nm ~ (n * m)) => Dimensional nm (Tensor s u v) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing nm Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (Tensor s u v)) => Int -> α (Scalar (Tensor s u v)) -> Tensor s u v Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (Tensor s u v)) => Mutable α σ (Scalar (Tensor s u v)) -> Int -> Tensor s u v -> ST σ () Source #

(Dimensional n (f p), Dimensional m (g p), Scalar (f p) ~ Scalar (g p), nm ~ (n + m)) => Dimensional nm ((f :*: g) p) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing nm Source #

unsafeFromArrayWithOffset :: Vector α (Scalar ((f :*: g) p)) => Int -> α (Scalar ((f :*: g) p)) -> (f :*: g) p Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar ((f :*: g) p)) => Mutable α σ (Scalar ((f :*: g) p)) -> Int -> (f :*: g) p -> ST σ () Source #

Dimensional n (f p) => Dimensional n (M1 i c f p) Source # 
Instance details

Defined in Math.LinearMap.Category.Class

Methods

knownDimensionalitySing :: Sing n Source #

unsafeFromArrayWithOffset :: Vector α (Scalar (M1 i c f p)) => Int -> α (Scalar (M1 i c f p)) -> M1 i c f p Source #

unsafeWriteArrayWithOffset :: forall (α :: Type -> Type) σ. Vector α (Scalar (M1 i c f p)) => Mutable α σ (Scalar (M1 i c f p)) -> Int -> M1 i c f p -> ST σ () Source #

class DimensionAware v => StaticDimensional v where Source #

Methods

dimensionIsStatic :: forall r. (forall n. (KnownNat n, n `Dimensional` v) => r) -> r Source #

Instances

Instances details
(DimensionAware v, IsJust (StaticDimension v) ~ 'True) => StaticDimensional v Source # 
Instance details

Defined in Math.VectorSpace.DimensionAware

Methods

dimensionIsStatic :: (forall (n :: Nat). (KnownNat n, Dimensional n v) => r) -> r Source #

dimensionalitySing :: forall v n. n `Dimensional` v => Sing n Source #

dimension :: forall v n a. (n `Dimensional` v, Integral a) => a Source #

dimensionOf :: forall v n a. (n `Dimensional` v, Integral a) => v -> a Source #

Convenience function. The result does never depend on the runtime input, only on its type.

unsafeFromArray :: forall v n α. (n `Dimensional` v, Vector α (Scalar v)) => α (Scalar v) -> v Source #

Read basis expansion from an array. The array must have length n, else the behaviour is undefined.

fromArray :: forall v n α. (n `Dimensional` v, Vector α (Scalar v)) => α (Scalar v) -> Maybe v Source #

Read basis expansion from an array, if the size equals the dimension.

toArray :: forall v n α. (n `Dimensional` v, Vector α (Scalar v)) => v -> α (Scalar v) Source #

Write out basis expansion to an array, whose length will always be n.

scalarUnsafeFromArrayWithOffset :: (v ~ Scalar v, Vector α v) => Int -> α v -> v Source #

scalarUnsafeWriteArrayWithOffset :: (v ~ Scalar v, Vector α v) => Mutable α σ v -> Int -> v -> ST σ () Source #

unsafeFromArrayWithOffsetViaList :: forall v n α. (n `Dimensional` v, Vector α (Scalar v)) => ([Scalar v] -> v) -> Int -> α (Scalar v) -> v Source #

unsafeWriteArrayWithOffsetViaList :: forall v n α σ. (n `Dimensional` v, Vector α (Scalar v)) => (v -> [Scalar v]) -> Mutable α σ (Scalar v) -> Int -> v -> ST σ () Source #

notStaticDimensionalContradiction :: forall v n r. StaticDimension v ~ 'Nothing => r Source #

To be used as an “absurd” values for implementing methods whose constraints combine to require both static- and flexible dimensionality (which can thus never be called).

The actual type of this should be

  notStaticDimensionalContradiction :: ∀ v n r
    . (nDimensionalv, StaticDimension v ~ 'Nothing) => r

GHC 9.6 baulks at that, though. It is a self-contradicting type, but that's the whole point...