numhask-0.0.4: A numeric prelude

Safe HaskellNone
LanguageHaskell2010

NumHask.Tensor

Contents

Description

N-dimensional arrays. Two classes are supplied:

  • Tensor where shape information is held at type level, and
  • SomeTensor where shape is held at the value level.

In both cases, the underlying data is contained as a flat vector for efficiency purposes.

Synopsis

Documentation

newtype Tensor r a Source #

an n-dimensional array where shape is specified at the type level The main purpose of this, beyond safe typing, is to supply the Representable instance with an initial object. A single Boxed Vector is used underneath for efficient slicing, but this may change or become polymorphic in the future.

Constructors

Tensor 

Fields

Instances

Functor (Tensor k r) Source # 

Methods

fmap :: (a -> b) -> Tensor k r a -> Tensor k r b #

(<$) :: a -> Tensor k r b -> Tensor k r a #

Foldable (Tensor k r) Source # 

Methods

fold :: Monoid m => Tensor k r m -> m #

foldMap :: Monoid m => (a -> m) -> Tensor k r a -> m #

foldr :: (a -> b -> b) -> b -> Tensor k r a -> b #

foldr' :: (a -> b -> b) -> b -> Tensor k r a -> b #

foldl :: (b -> a -> b) -> b -> Tensor k r a -> b #

foldl' :: (b -> a -> b) -> b -> Tensor k r a -> b #

foldr1 :: (a -> a -> a) -> Tensor k r a -> a #

foldl1 :: (a -> a -> a) -> Tensor k r a -> a #

toList :: Tensor k r a -> [a] #

null :: Tensor k r a -> Bool #

length :: Tensor k r a -> Int #

elem :: Eq a => a -> Tensor k r a -> Bool #

maximum :: Ord a => Tensor k r a -> a #

minimum :: Ord a => Tensor k r a -> a #

sum :: Num a => Tensor k r a -> a #

product :: Num a => Tensor k r a -> a #

SingI [Nat] r => Distributive (Tensor [Nat] r) Source # 

Methods

distribute :: Functor f => f (Tensor [Nat] r a) -> Tensor [Nat] r (f a) #

collect :: Functor f => (a -> Tensor [Nat] r b) -> f a -> Tensor [Nat] r (f b) #

distributeM :: Monad m => m (Tensor [Nat] r a) -> Tensor [Nat] r (m a) #

collectM :: Monad m => (a -> Tensor [Nat] r b) -> m a -> Tensor [Nat] r (m b) #

SingI [Nat] r => Representable (Tensor [Nat] r) Source # 

Associated Types

type Rep (Tensor [Nat] r :: * -> *) :: * #

Methods

tabulate :: (Rep (Tensor [Nat] r) -> a) -> Tensor [Nat] r a #

index :: Tensor [Nat] r a -> Rep (Tensor [Nat] r) -> a #

SingI [Nat] r => Naperian (Tensor [Nat] r) Source # 
SingI [Nat] r => HasShape (Tensor [Nat] r) Source # 

Associated Types

type Shape (Tensor [Nat] r :: * -> *) :: * Source #

Methods

shape :: Tensor [Nat] r a -> Shape (Tensor [Nat] r) Source #

ndim :: Tensor [Nat] r a -> Int Source #

(SingI [Nat] r, AdditiveUnital a) => IsList (Tensor [Nat] r a) Source #

from flat list

Associated Types

type Item (Tensor [Nat] r a) :: * #

Methods

fromList :: [Item (Tensor [Nat] r a)] -> Tensor [Nat] r a #

fromListN :: Int -> [Item (Tensor [Nat] r a)] -> Tensor [Nat] r a #

toList :: Tensor [Nat] r a -> [Item (Tensor [Nat] r a)] #

Eq a => Eq (Tensor k r a) Source # 

Methods

(==) :: Tensor k r a -> Tensor k r a -> Bool #

(/=) :: Tensor k r a -> Tensor k r a -> Bool #

(Show a, SingI [Nat] r) => Show (Tensor [Nat] r a) Source # 

Methods

showsPrec :: Int -> Tensor [Nat] r a -> ShowS #

show :: Tensor [Nat] r a -> String #

showList :: [Tensor [Nat] r a] -> ShowS #

(SingI [Nat] r, Arbitrary a, AdditiveUnital a) => Arbitrary (Tensor [Nat] r a) Source # 

Methods

arbitrary :: Gen (Tensor [Nat] r a) #

shrink :: Tensor [Nat] r a -> [Tensor [Nat] r a] #

type Rep (Tensor [Nat] r) Source # 
type Rep (Tensor [Nat] r) = [Int]
type Shape (Tensor [Nat] r) Source # 
type Shape (Tensor [Nat] r) = [Int]
type Item (Tensor [Nat] r a) Source # 
type Item (Tensor [Nat] r a) = a

data SomeTensor a Source #

an n-dimensional array where shape is specified at the value level as an '[Int]' Use this to avoid type-level hasochism by demoting a Tensor with someTensor

Constructors

SomeTensor [Int] (Vector a) 

Instances

Functor SomeTensor Source # 

Methods

fmap :: (a -> b) -> SomeTensor a -> SomeTensor b #

(<$) :: a -> SomeTensor b -> SomeTensor a #

Foldable SomeTensor Source # 

Methods

fold :: Monoid m => SomeTensor m -> m #

foldMap :: Monoid m => (a -> m) -> SomeTensor a -> m #

foldr :: (a -> b -> b) -> b -> SomeTensor a -> b #

foldr' :: (a -> b -> b) -> b -> SomeTensor a -> b #

foldl :: (b -> a -> b) -> b -> SomeTensor a -> b #

foldl' :: (b -> a -> b) -> b -> SomeTensor a -> b #

foldr1 :: (a -> a -> a) -> SomeTensor a -> a #

foldl1 :: (a -> a -> a) -> SomeTensor a -> a #

toList :: SomeTensor a -> [a] #

null :: SomeTensor a -> Bool #

length :: SomeTensor a -> Int #

elem :: Eq a => a -> SomeTensor a -> Bool #

maximum :: Ord a => SomeTensor a -> a #

minimum :: Ord a => SomeTensor a -> a #

sum :: Num a => SomeTensor a -> a #

product :: Num a => SomeTensor a -> a #

HasShape SomeTensor Source # 

Associated Types

type Shape (SomeTensor :: * -> *) :: * Source #

Eq a => Eq (SomeTensor a) Source # 

Methods

(==) :: SomeTensor a -> SomeTensor a -> Bool #

(/=) :: SomeTensor a -> SomeTensor a -> Bool #

Show a => Show (SomeTensor a) Source # 
(Arbitrary a, AdditiveUnital a) => Arbitrary (SomeTensor a) Source # 
type Shape SomeTensor Source # 

Conversion

someTensor :: SingI r => Tensor (r :: [Nat]) a -> SomeTensor a Source #

convert a Tensor to a SomeTensor, losing the type level shape

unsafeToTensor :: SomeTensor a -> Tensor (r :: [Nat]) a Source #

convert a SomeTensor to a Tensor with no checks on shape.

toTensor :: forall a r. SingI r => SomeTensor a -> Maybe (Tensor (r :: [Nat]) a) Source #

convert a SomeTensor to a Tensor, check for shape equality.

flatten1 :: SomeTensor a -> [SomeTensor a] Source #

convert the top layer of a SomeTensor to a [SomeTensor]