Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Synopsis
- type family Transpose a
- transposeIso :: (Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Transposable n m a, Transposable m n a) => (m a :-> n a) :==: (n a :-> m a)
- vnegateIso :: VectorSpace v => v :==: v
- (!$!) :: (Linearizable LinearMap (:*:) f g b, Num b, Functor f, Functor g) => f (a -> b) -> g a -> f b :-> g b
- matrixBind :: Functor f => f a -> (a -> g b) -> (f :*: g) b
- matrix2d :: (Functor f, Functor g) => (a -> b -> c) -> f a -> g b -> (f :*: g) c
- matrix3d :: (Functor f, Functor g, Functor h) => (a -> b -> c -> d) -> f a -> g b -> h c -> (f :*: (g :*: h)) d
- matrix4d :: (Functor f, Functor g, Functor h, Functor i) => (a -> b -> c -> d -> e) -> f a -> g b -> h c -> i d -> (f :*: (g :*: (h :*: i))) e
- constantMatrix :: (Applicative m, Applicative n) => a -> (m :*: n) a
- applyCol :: Applicative f => (f :*: (->) a) b -> f a -> f b
- applyRow :: ((->) a :*: g) b -> a -> g b
- matrixA :: (ArrowApply arr, FunctorArrow f arr arr, FunctorArrow g arr arr) => arr (a, b) c -> arr (f a, g b) ((f :*: g) c)
- mod_linear_map :: (Linearizable LinearMap (:*:) f f a, Diagonalizable f a, Integral (f a)) => f a -> f a :-> f a
- modular_exponentiation :: (SupportsMatrixMultiplication f f f a, a ~ f b, Linearizable LinearMap (:*:) f f a, Linearizable LinearMap (:*:) f f b, Diagonalizable f b, LinearTransform f f b, FunctorArrow f LinearMap LinearMap, Integral b) => (f a :-> f a) -> Integer -> b -> f a :-> f a
- isSymmetric :: (Eq (m (m a)), LinearTransform m m a, Linearizable LinearMap (:*:) m m a, Diagonalizable m a, Transposable m m a, Applicative m, Foldable m, Eq a) => (m a :-> m a) -> Bool
- apply_vector :: (LinearTransform m m b, Linearizable LinearMap (:*:) m m b, Transposable m m b, Diagonalizable m b) => m (a -> b) -> m a -> m b
- apply_columns :: (Functor n, Functor m, Applicative f) => (m :*: f) (a -> b) -> (n :*: f) a -> (m :*: n) (f b)
- matrixAssoc :: Functor f => ((f :*: g) :*: h) a -> (f :*: (g :*: h)) a
- matrixUnassoc :: Functor f => (f :*: (g :*: h)) a -> ((f :*: g) :*: h) a
- matrixLeftId :: (I :*: f) a -> f a
- matrixRightId :: Functor f => (f :*: I) a -> f a
- (!*!) :: (Functor f, Functor g, Num a) => g a -> f a -> (g :*: f) a
- (<!!>) :: (Ix i, Ix j) => (Array i :*: Array j) a -> (i, j) -> a
- project_down :: (Functor (m \\\ m'), ProjectionSpace m m', ProjectionSpace n Vector1) => (m :*: n) a -> (m \\\ m') a
- project_right :: (ProjectionSpace m Vector1, ProjectionSpace n n') => (m :*: n) a -> (n \\\ n') a
- project_diagonal :: (ProjectionSpace m m', ProjectionSpace n n') => (m :*: n) a -> ((m \\\ m') :*: (n \\\ n')) a
- matrix_commutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, VectorSpace ((g :*: g) a), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) (Scalar (g a))
- matrix_anticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, VectorSpace ((g :*: g) a), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) (Scalar (g a))
- normalized_anticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a, VectorSpace ((g :*: g) a)) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a
- commute :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, VectorSpace ((g :*: g) a), Num a) => Complex ((g :*: g) a) -> Complex ((g :*: g) a) -> ((g :*: g) :*: (g :*: g)) (Complex a)
- bind_diagonal :: Monad m => (m :*: m) a -> (a -> m b) -> m b
- pairMatrix :: (Functor f, Functor g) => f a -> g b -> (f :*: g) (a, b)
- (!+!) :: (Functor f, Functor g, Num a) => g a -> f a -> (g :*: f) a
- cofunctor_inverse_image :: (Functor f, CoFunctor g) => (a -> b) -> (g :*: f) b -> (g :*: f) a
- cofunctor_map :: (CoFunctor f, CoFunctor g) => (a -> b) -> (g :*: f) a -> (g :*: f) b
- in_transpose :: (Monad g, Indexable f b, Integral b) => (f :*: g) a -> (a -> (g :*: f) b) -> (f :*: g) b
- fmap_split :: (SplittableVector m n, AppendableVector m' n') => (m a -> m' a') -> (n a -> n' a') -> (m :+: n) a -> (m' :+: n') a'
- split_matrix :: (SplittableVector m n, SplittableVector f f', Functor (f :+: f'), Functor (m :+: n)) => ((f :+: f') :*: (m :+: n)) a -> (((f :*: m) a, (f :*: n) a), ((f' :*: m) a, (f' :*: n) a))
- append_matrix :: (AppendableVector m' n', AppendableVector m n) => (m :*: m') a -> (m :*: n') a -> (n :*: m') a -> (n :*: n') a -> ((m :+: n) :*: (m' :+: n')) a
- matrix_iso :: f (g a) :==: (f :*: g) a
- matrix_size :: (CoordinateSpace (g (f a)), CoordinateSpace (f (g a)), Transposable f g a) => (f :*: g) a -> (Int, Int)
- data Strassen_Split f g a where
- Strassen_Two :: (Vector2 :*: Vector2) a -> Strassen_Split Vector1 Vector1 a
- Strassen_PowerOfTwo :: Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_plus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_minus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_matrix_multiply :: (ConjugateSymmetric a, Num a) => Strassen_Split f g a -> Strassen_Split g h a -> Strassen_Split f h a
Documentation
transposeIso :: (Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Transposable n m a, Transposable m n a) => (m a :-> n a) :==: (n a :-> m a) Source #
vnegateIso :: VectorSpace v => v :==: v Source #
(!$!) :: (Linearizable LinearMap (:*:) f g b, Num b, Functor f, Functor g) => f (a -> b) -> g a -> f b :-> g b Source #
matrixBind :: Functor f => f a -> (a -> g b) -> (f :*: g) b Source #
matrix2d :: (Functor f, Functor g) => (a -> b -> c) -> f a -> g b -> (f :*: g) c Source #
this is same as Matrix.Interface.matrix
matrix3d :: (Functor f, Functor g, Functor h) => (a -> b -> c -> d) -> f a -> g b -> h c -> (f :*: (g :*: h)) d Source #
matrix4d :: (Functor f, Functor g, Functor h, Functor i) => (a -> b -> c -> d -> e) -> f a -> g b -> h c -> i d -> (f :*: (g :*: (h :*: i))) e Source #
constantMatrix :: (Applicative m, Applicative n) => a -> (m :*: n) a Source #
needs type annotation
applyCol :: Applicative f => (f :*: (->) a) b -> f a -> f b Source #
matrixA :: (ArrowApply arr, FunctorArrow f arr arr, FunctorArrow g arr arr) => arr (a, b) c -> arr (f a, g b) ((f :*: g) c) Source #
mod_linear_map :: (Linearizable LinearMap (:*:) f f a, Diagonalizable f a, Integral (f a)) => f a -> f a :-> f a Source #
https://en.wikipedia.org/wiki/Modular_exponentiation
modular_exponentiation m b c == m^b (mod c)
modular_exponentiation :: (SupportsMatrixMultiplication f f f a, a ~ f b, Linearizable LinearMap (:*:) f f a, Linearizable LinearMap (:*:) f f b, Diagonalizable f b, LinearTransform f f b, FunctorArrow f LinearMap LinearMap, Integral b) => (f a :-> f a) -> Integer -> b -> f a :-> f a Source #
isSymmetric :: (Eq (m (m a)), LinearTransform m m a, Linearizable LinearMap (:*:) m m a, Diagonalizable m a, Transposable m m a, Applicative m, Foldable m, Eq a) => (m a :-> m a) -> Bool Source #
apply_vector :: (LinearTransform m m b, Linearizable LinearMap (:*:) m m b, Transposable m m b, Diagonalizable m b) => m (a -> b) -> m a -> m b Source #
apply_columns :: (Functor n, Functor m, Applicative f) => (m :*: f) (a -> b) -> (n :*: f) a -> (m :*: n) (f b) Source #
matrixLeftId :: (I :*: f) a -> f a Source #
project_down :: (Functor (m \\\ m'), ProjectionSpace m m', ProjectionSpace n Vector1) => (m :*: n) a -> (m \\\ m') a Source #
project_right :: (ProjectionSpace m Vector1, ProjectionSpace n n') => (m :*: n) a -> (n \\\ n') a Source #
project_diagonal :: (ProjectionSpace m m', ProjectionSpace n n') => (m :*: n) a -> ((m \\\ m') :*: (n \\\ n')) a Source #
matrix_commutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, VectorSpace ((g :*: g) a), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) (Scalar (g a)) Source #
matrix_anticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, VectorSpace ((g :*: g) a), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) (Scalar (g a)) Source #
normalized_anticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, Num a, VectorSpace ((g :*: g) a)) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a Source #
commute :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpace (g a), ConjugateSymmetric a, Transposable g g a, VectorSpace ((g :*: g) a), Num a) => Complex ((g :*: g) a) -> Complex ((g :*: g) a) -> ((g :*: g) :*: (g :*: g)) (Complex a) Source #
bind_diagonal :: Monad m => (m :*: m) a -> (a -> m b) -> m b Source #
cofunctor_inverse_image :: (Functor f, CoFunctor g) => (a -> b) -> (g :*: f) b -> (g :*: f) a Source #
in_transpose :: (Monad g, Indexable f b, Integral b) => (f :*: g) a -> (a -> (g :*: f) b) -> (f :*: g) b Source #
fmap_split :: (SplittableVector m n, AppendableVector m' n') => (m a -> m' a') -> (n a -> n' a') -> (m :+: n) a -> (m' :+: n') a' Source #
split_matrix :: (SplittableVector m n, SplittableVector f f', Functor (f :+: f'), Functor (m :+: n)) => ((f :+: f') :*: (m :+: n)) a -> (((f :*: m) a, (f :*: n) a), ((f' :*: m) a, (f' :*: n) a)) Source #
append_matrix :: (AppendableVector m' n', AppendableVector m n) => (m :*: m') a -> (m :*: n') a -> (n :*: m') a -> (n :*: n') a -> ((m :+: n) :*: (m' :+: n')) a Source #
matrix_iso :: f (g a) :==: (f :*: g) a Source #
matrix_size :: (CoordinateSpace (g (f a)), CoordinateSpace (f (g a)), Transposable f g a) => (f :*: g) a -> (Int, Int) Source #
data Strassen_Split f g a where Source #
Strassen_Two :: (Vector2 :*: Vector2) a -> Strassen_Split Vector1 Vector1 a | |
Strassen_PowerOfTwo :: Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a |
strassen_plus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a Source #
strassen_minus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a Source #
strassen_matrix_multiply :: (ConjugateSymmetric a, Num a) => Strassen_Split f g a -> Strassen_Split g h a -> Strassen_Split f h a Source #