-- |
-- Module      : Math.LinearMap.Category.Class
-- Copyright   : (c) Justus Sagemüller 2016
-- License     : GPL v3
-- 
-- Maintainer  : (@) jsag $ hvl.no
-- Stability   : experimental
-- Portability : portable
-- 
{-# LANGUAGE FlexibleInstances          #-}
{-# LANGUAGE FlexibleContexts           #-}
{-# LANGUAGE ConstraintKinds            #-}
{-# LANGUAGE UndecidableInstances       #-}
{-# LANGUAGE FunctionalDependencies     #-}
{-# LANGUAGE TypeOperators              #-}
{-# LANGUAGE TypeFamilies               #-}
{-# LANGUAGE AllowAmbiguousTypes        #-}
{-# LANGUAGE Rank2Types                 #-}
{-# LANGUAGE ScopedTypeVariables        #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE ViewPatterns               #-}
{-# LANGUAGE UnicodeSyntax              #-}
{-# LANGUAGE TupleSections              #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GADTs                      #-}
{-# LANGUAGE DefaultSignatures          #-}
{-# LANGUAGE CPP                        #-}

module Math.LinearMap.Category.Class where

import Data.VectorSpace
import Data.AffineSpace

import Prelude ()
import qualified Prelude as Hask

import Control.Category.Constrained.Prelude
import Control.Arrow.Constrained

import Data.Coerce
import Data.Type.Coercion
import Data.Tagged

import Math.Manifold.Core.PseudoAffine
import Math.LinearMap.Asserted
import Math.VectorSpace.ZeroDimensional
import Data.VectorSpace.Free

import qualified GHC.Generics as Gnrx
import GHC.Generics (Generic, (:*:)((:*:)))

data ClosedScalarWitness s where
  ClosedScalarWitness :: (Scalar s ~ s, DualVector s ~ s) => ClosedScalarWitness s
data TrivialTensorWitness s w where
  TrivialTensorWitness :: w ~ TensorProduct s w => TrivialTensorWitness s w

class (Num s, LinearSpace s, FreeVectorSpace s) => Num' s where
  closedScalarWitness :: ClosedScalarWitness s
  default closedScalarWitness :: (Scalar s ~ s, DualVector s ~ s) => ClosedScalarWitness s
  closedScalarWitness = ClosedScalarWitness s
forall s. (Scalar s ~ s, DualVector s ~ s) => ClosedScalarWitness s
ClosedScalarWitness
  trivialTensorWitness :: TrivialTensorWitness s w
  default trivialTensorWitness :: (w ~ TensorProduct s w) => TrivialTensorWitness s w
  trivialTensorWitness = TrivialTensorWitness s w
forall w s. (w ~ TensorProduct s w) => TrivialTensorWitness s w
TrivialTensorWitness

data ScalarSpaceWitness v where
  ScalarSpaceWitness :: (Num' (Scalar v), Scalar (Scalar v) ~ Scalar v)
                          => ScalarSpaceWitness v
data LinearManifoldWitness v where
  LinearManifoldWitness :: (Needle v ~ v, AffineSpace v, Diff v ~ v)
                         =>
#if !MIN_VERSION_manifolds_core(0,6,0)
                           BoundarylessWitness v ->
#endif
                           LinearManifoldWitness v
  
class (VectorSpace v, PseudoAffine v) => TensorSpace v where
  -- | The internal representation of a 'Tensor' product.
  -- 
  -- For Euclidean spaces, this is generally constructed by replacing each @s@
  -- scalar field in the @v@ vector with an entire @w@ vector. I.e., you have
  -- then a “nested vector” or, if @v@ is a @DualVector@ / “row vector”, a matrix.
  type TensorProduct v w :: *
  scalarSpaceWitness :: ScalarSpaceWitness v
  linearManifoldWitness :: LinearManifoldWitness v
  zeroTensor :: (TensorSpace w, Scalar w ~ Scalar v)
                => v  w
  toFlatTensor :: v -+> (v  Scalar v)
  fromFlatTensor :: (v  Scalar v) -+> v
  addTensors :: (TensorSpace w, Scalar w ~ Scalar v)
                => (v  w) -> (v  w) -> v  w
  default addTensors :: AdditiveGroup (TensorProduct v w) => (v  w) -> (v  w) -> v  w
  addTensors (Tensor TensorProduct v w
vw₀) (Tensor TensorProduct v w
vw₁) = TensorProduct v w -> v ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (TensorProduct v w -> v ⊗ w) -> TensorProduct v w -> v ⊗ w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ TensorProduct v w
vw₀ TensorProduct v w -> TensorProduct v w -> TensorProduct v w
forall v. AdditiveGroup v => v -> v -> v
^+^ TensorProduct v w
vw₁
  subtractTensors :: (TensorSpace v, TensorSpace w, Scalar w ~ Scalar v)
                => (v  w) -> (v  w) -> v  w
  default subtractTensors :: AdditiveGroup (TensorProduct v w) => (v  w) -> (v  w) -> v  w
  subtractTensors (Tensor TensorProduct v w
vw₀) (Tensor TensorProduct v w
vw₁) = TensorProduct v w -> v ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (TensorProduct v w -> v ⊗ w) -> TensorProduct v w -> v ⊗ w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ TensorProduct v w
vw₀ TensorProduct v w -> TensorProduct v w -> TensorProduct v w
forall v. AdditiveGroup v => v -> v -> v
^-^ TensorProduct v w
vw₁
  scaleTensor :: (TensorSpace w, Scalar w ~ Scalar v)
                => Bilinear (Scalar v) (v  w) (v  w)
  default scaleTensor
      :: (VectorSpace (TensorProduct v w), Scalar (TensorProduct v w) ~ Scalar v)
           => Bilinear (Scalar v) (v  w) (v  w)
  scaleTensor = (Scalar v -> (v ⊗ w) -> v ⊗ w)
-> Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((Scalar v -> (v ⊗ w) -> v ⊗ w)
 -> Bilinear (Scalar v) (v ⊗ w) (v ⊗ w))
-> (Scalar v -> (v ⊗ w) -> v ⊗ w)
-> Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar v
μ (Tensor TensorProduct v w
vw) -> TensorProduct v w -> v ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (TensorProduct v w -> v ⊗ w) -> TensorProduct v w -> v ⊗ w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Scalar v
Scalar (TensorProduct v w)
μScalar (TensorProduct v w)
-> TensorProduct v w -> TensorProduct v w
forall v. VectorSpace v => Scalar v -> v -> v
*^TensorProduct v w
vw
  negateTensor :: (TensorSpace w, Scalar w ~ Scalar v)
                => (v  w) -+> (v  w)
  default negateTensor :: AdditiveGroup (TensorProduct v w) => (v  w) -+> (v  w)
  negateTensor = ((v ⊗ w) -> v ⊗ w) -> LinearFunction (Scalar v) (v ⊗ w) (v ⊗ w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((v ⊗ w) -> v ⊗ w) -> LinearFunction (Scalar v) (v ⊗ w) (v ⊗ w))
-> ((v ⊗ w) -> v ⊗ w) -> LinearFunction (Scalar v) (v ⊗ w) (v ⊗ w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor TensorProduct v w
vw) -> TensorProduct v w -> v ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (TensorProduct v w -> v ⊗ w) -> TensorProduct v w -> v ⊗ w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ TensorProduct v w -> TensorProduct v w
forall v. AdditiveGroup v => v -> v
negateV TensorProduct v w
vw
  tensorProduct :: (TensorSpace w, Scalar w ~ Scalar v)
                => Bilinear v w (v  w)
  tensorProducts :: (TensorSpace w, Scalar w ~ Scalar v)
                => [(v,w)] -> (v  w)
  tensorProducts [(v, w)]
vws = [v ⊗ w] -> v ⊗ w
forall (f :: * -> *) v. (Foldable f, AdditiveGroup v) => f v -> v
sumV [ LinearFunction (Scalar v) w (v ⊗ w) -> w -> v ⊗ w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction (
                              LinearFunction (Scalar v) v (LinearFunction (Scalar v) w (v ⊗ w))
-> v -> LinearFunction (Scalar v) w (v ⊗ w)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction (Scalar v) v (LinearFunction (Scalar v) w (v ⊗ w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProduct v
v) w
w
                            | (v
v,w
w) <- [(v, w)]
vws ]
  transposeTensor :: (TensorSpace w, Scalar w ~ Scalar v)
                => (v  w) -+> (w  v)
  fmapTensor :: (TensorSpace w, TensorSpace x, Scalar w ~ Scalar v, Scalar x ~ Scalar v)
           => Bilinear (w -+> x) (vw) (vx)
  fzipTensorWith :: ( TensorSpace u, TensorSpace w, TensorSpace x
                    , Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v )
           => Bilinear ((w,x) -+> u) (vw, vx) (vu)
  coerceFmapTensorProduct :: Hask.Functor p
       => p v -> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
  -- | “Sanity-check” a vector. This typically amounts to detecting any NaN components,
  --   which should trigger a @Nothing@ result. Otherwise, the result should be @Just@
  --   the input, but may also be optimised / memoised if applicable (i.e. for
  --   function spaces).
  wellDefinedVector :: v -> Maybe v
  default wellDefinedVector :: Eq v => v -> Maybe v
  wellDefinedVector v
v = if v
vv -> v -> Bool
forall a. Eq a => a -> a -> Bool
==v
v then v -> Maybe v
forall a. a -> Maybe a
Just v
v else Maybe v
forall a. Maybe a
Nothing
  wellDefinedTensor :: (TensorSpace w, Scalar w ~ Scalar v) => vw -> Maybe (vw)

infixl 7 

-- | Infix version of 'tensorProduct'.
(⊗) ::  v w . (TensorSpace v, TensorSpace w, Scalar w ~ Scalar v, Num' (Scalar v))
                => v -> w -> v  w
v
v⊗ :: v -> w -> v ⊗ w
w
w = (LinearFunction (Scalar v) v (LinearFunction (Scalar v) w (v ⊗ w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction (Scalar v) v (LinearFunction (Scalar v) w (v ⊗ w))
-> v -> LinearFunction (Scalar v) w (v ⊗ w)
forall s v w. LinearFunction s v w -> v -> w
-+$>v
v)LinearFunction (Scalar v) w (v ⊗ w) -> w -> v ⊗ w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w

data DualSpaceWitness v where
  DualSpaceWitness :: ( LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v
                      , LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v
                      , DualVector (DualVector v) ~ v )
                             => DualSpaceWitness v
  
-- | The class of vector spaces @v@ for which @'LinearMap' s v w@ is well-implemented.
class (TensorSpace v, Num (Scalar v)) => LinearSpace v where
  -- | Suitable representation of a linear map from the space @v@ to its field.
  -- 
  --   For the usual euclidean spaces, you can just define @'DualVector' v = v@.
  --   (In this case, a dual vector will be just a “row vector” if you consider
  --   @v@-vectors as “column vectors”. 'LinearMap' will then effectively have
  --   a matrix layout.)
  type DualVector v :: *
  
  dualSpaceWitness :: DualSpaceWitness v
 
  linearId :: v +> v
  
  idTensor :: v  DualVector v
  idTensor = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
               DualSpaceWitness v
DualSpaceWitness -> LinearFunction
  (Scalar v)
  (Tensor (Scalar (DualVector v)) (DualVector v) v)
  (v ⊗ DualVector v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar v)
  (Tensor (Scalar (DualVector v)) (DualVector v) v)
  (v ⊗ DualVector v)
-> Tensor (Scalar (DualVector v)) (DualVector v) v
-> v ⊗ DualVector v
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap (Scalar v) v v)
  (Tensor (Scalar (DualVector v)) (DualVector v) v)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar v) v v)
  (Tensor (Scalar (DualVector v)) (DualVector v) v)
-> LinearMap (Scalar v) v v
-> Tensor (Scalar (DualVector v)) (DualVector v) v
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar v) v v
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  
  sampleLinearFunction :: (TensorSpace w, Scalar v ~ Scalar w)
                             => (v-+>w) -+> (v+>w)
  sampleLinearFunction = case ( ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v
                              , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
        (ScalarSpaceWitness v
ScalarSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> (LinearFunction (Scalar v) v w -> v +> w)
-> LinearFunction
     (Scalar v) (LinearFunction (Scalar v) v w) (v +> w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
                               ((LinearFunction (Scalar v) v w -> v +> w)
 -> LinearFunction
      (Scalar v) (LinearFunction (Scalar v) v w) (v +> w))
-> (LinearFunction (Scalar v) v w -> v +> w)
-> LinearFunction
     (Scalar v) (LinearFunction (Scalar v) v w) (v +> w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction (Scalar v) v w
f -> LinearFunction (Scalar v) (LinearMap (Scalar v) v v) (v +> w)
-> LinearMap (Scalar v) v v -> v +> w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction (LinearFunction (Scalar v) v w
-> LinearFunction (Scalar v) (LinearMap (Scalar v) v v) (v +> w)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction (Scalar v) v w
f) LinearMap (Scalar v) v v
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  
  toLinearForm :: DualVector v -+> (v+>Scalar v)
  toLinearForm = case ( ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v
                      , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
    (ScalarSpaceWitness v
ScalarSpaceWitness,DualSpaceWitness v
DualSpaceWitness) -> LinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (Tensor
     (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor LinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (Tensor
     (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
-> LinearFunction
     (Scalar (DualVector v))
     (Tensor
        (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
     (v +> Scalar v)
-> LinearFunction
     (Scalar (DualVector v)) (DualVector v) (v +> Scalar v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor
     (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
  (v +> Scalar v)
-> LinearFunction
     (Scalar (DualVector v))
     (Tensor
        (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
     (v +> Scalar v)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor
     (Scalar (DualVector v)) (DualVector v) (Scalar (DualVector v)))
  (v +> Scalar v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor
  
  fromLinearForm :: (v+>Scalar v) -+> DualVector v
  fromLinearForm = case ( ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v
                        , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
    (ScalarSpaceWitness v
ScalarSpaceWitness,DualSpaceWitness v
DualSpaceWitness) -> Coercion
  (v +> Scalar v) (Tensor (Scalar v) (DualVector v) (Scalar v))
-> LinearFunction
     (Scalar (DualVector v))
     (v +> Scalar v)
     (Tensor (Scalar v) (DualVector v) (Scalar v))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (v +> Scalar v) (Tensor (Scalar v) (DualVector v) (Scalar v))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor LinearFunction
  (Scalar (DualVector v))
  (v +> Scalar v)
  (Tensor (Scalar v) (DualVector v) (Scalar v))
-> LinearFunction
     (Scalar (DualVector v))
     (Tensor (Scalar v) (DualVector v) (Scalar v))
     (DualVector v)
-> (v +> Scalar v) -+> DualVector v
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (DualVector v))
  (Tensor (Scalar v) (DualVector v) (Scalar v))
  (DualVector v)
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
  
  coerceDoubleDual :: Coercion v (DualVector (DualVector v))
  coerceDoubleDual = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
    DualSpaceWitness v
DualSpaceWitness -> Coercion v (DualVector (DualVector v))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  
  trace :: (v+>v) -+> Scalar v
  trace = case ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v of
      ScalarSpaceWitness v
ScalarSpaceWitness -> Bilinear
  (LinearMap (Scalar v) v v)
  (LinearFunction (Scalar v) v v)
  (Scalar v)
-> Bilinear
     (LinearFunction (Scalar v) v v)
     (LinearMap (Scalar v) v v)
     (Scalar v)
forall v w y. Bilinear v w y -> Bilinear w v y
flipBilin Bilinear
  (LinearMap (Scalar v) v v)
  (LinearFunction (Scalar v) v v)
  (Scalar v)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) (w -+> v) (Scalar v)
contractLinearMapAgainstLinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) v v)
  (LinearFunction (Scalar v) (LinearMap (Scalar v) v v) (Scalar v))
-> LinearFunction (Scalar v) v v
-> LinearFunction (Scalar v) (LinearMap (Scalar v) v v) (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction (Scalar v) v v
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  
  contractTensorMap :: (TensorSpace w, Scalar w ~ Scalar v)
           => (v+>(vw)) -+> w
  contractTensorMap = case ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v of
           ScalarSpaceWitness v
ScalarSpaceWitness -> Coercion
  (v +> (v ⊗ w)) (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
-> LinearFunction
     (Scalar w)
     (v +> (v ⊗ w))
     (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (v +> (v ⊗ w)) (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap LinearFunction
  (Scalar w)
  (v +> (v ⊗ w))
  (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) (LinearMap (Scalar v) v v) w) w
-> (v +> (v ⊗ w)) -+> w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar w)
  (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
  (Tensor (Scalar v) w (LinearMap (Scalar v) v v))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                                  LinearFunction
  (Scalar w)
  (Tensor (Scalar v) (LinearMap (Scalar v) v v) w)
  (Tensor (Scalar v) w (LinearMap (Scalar v) v v))
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) w (LinearMap (Scalar v) v v)) w
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) (LinearMap (Scalar v) v v) w) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearMap (Scalar v) v v -+> Scalar v)
-> LinearFunction
     (Scalar w)
     (Tensor (Scalar v) w (LinearMap (Scalar v) v v))
     (Tensor (Scalar v) w (Scalar v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearMap (Scalar v) v v -+> Scalar v
forall v. LinearSpace v => LinearMap (Scalar v) v v -+> Scalar v
trace LinearFunction
  (Scalar w)
  (Tensor (Scalar v) w (LinearMap (Scalar v) v v))
  (Tensor (Scalar v) w (Scalar v))
-> LinearFunction (Scalar w) (Tensor (Scalar v) w (Scalar v)) w
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) w (LinearMap (Scalar v) v v)) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar w) (Tensor (Scalar v) w (Scalar v)) w
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
  contractMapTensor :: (TensorSpace w, Scalar w ~ Scalar v)
           => (v(v+>w)) -+> w
  contractMapTensor = case ( ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v
                           , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
        (ScalarSpaceWitness v
ScalarSpaceWitness,DualSpaceWitness v
DualSpaceWitness)
              -> Coercion (v ⊗ (v +> w)) (Tensor (Scalar v) (v ⊗ DualVector v) w)
-> LinearFunction
     (Scalar w) (v ⊗ (v +> w)) (Tensor (Scalar v) (v ⊗ DualVector v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (v ⊗ (v +> w)) (LinearMap (Scalar v) (LinearMap (Scalar v) v v) w)
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMapCoercion
  (v ⊗ (v +> w)) (LinearMap (Scalar v) (LinearMap (Scalar v) v v) w)
-> Coercion
     (LinearMap (Scalar v) (LinearMap (Scalar v) v v) w)
     (Tensor (Scalar v) (v ⊗ DualVector v) w)
-> Coercion (v ⊗ (v +> w)) (Tensor (Scalar v) (v ⊗ DualVector v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap (Scalar v) (LinearMap (Scalar v) v v) w)
  (Tensor (Scalar v) (v ⊗ DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor)
                       LinearFunction
  (Scalar w) (v ⊗ (v +> w)) (Tensor (Scalar v) (v ⊗ DualVector v) w)
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) (v ⊗ DualVector v) w) w
-> (v ⊗ (v +> w)) -+> w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar w)
  (Tensor (Scalar v) (v ⊗ DualVector v) w)
  (Tensor (Scalar v) w (v ⊗ DualVector v))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  (Scalar w)
  (Tensor (Scalar v) (v ⊗ DualVector v) w)
  (Tensor (Scalar v) w (v ⊗ DualVector v))
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) w (v ⊗ DualVector v)) w
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) (v ⊗ DualVector v) w) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar (Scalar v)) (v ⊗ DualVector v) (Scalar v)
-> LinearFunction
     (Scalar w)
     (Tensor (Scalar v) w (v ⊗ DualVector v))
     (Tensor (Scalar v) w (Scalar v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
  (v ⊗ DualVector v)
  (LinearMap (Scalar v) (DualVector v) (DualVector v))
-> LinearFunction
     (Scalar (Scalar v))
     (v ⊗ DualVector v)
     (LinearMap (Scalar v) (DualVector v) (DualVector v))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (v ⊗ DualVector v)
  (LinearMap (Scalar v) (DualVector v) (DualVector v))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap LinearFunction
  (Scalar (Scalar v))
  (v ⊗ DualVector v)
  (LinearMap (Scalar v) (DualVector v) (DualVector v))
-> LinearFunction
     (Scalar (Scalar v))
     (LinearMap (Scalar v) (DualVector v) (DualVector v))
     (Scalar v)
-> LinearFunction (Scalar (Scalar v)) (v ⊗ DualVector v) (Scalar v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (Scalar v))
  (LinearMap (Scalar v) (DualVector v) (DualVector v))
  (Scalar v)
forall v. LinearSpace v => LinearMap (Scalar v) v v -+> Scalar v
trace)
                                LinearFunction
  (Scalar w)
  (Tensor (Scalar v) w (v ⊗ DualVector v))
  (Tensor (Scalar v) w (Scalar v))
-> LinearFunction (Scalar w) (Tensor (Scalar v) w (Scalar v)) w
-> LinearFunction
     (Scalar w) (Tensor (Scalar v) w (v ⊗ DualVector v)) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar w) (Tensor (Scalar v) w (Scalar v)) w
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
  contractTensorFn ::  w . (TensorSpace w, Scalar w ~ Scalar v)
           => (v-+>(vw)) -+> w
  contractTensorFn = (LinearFunction (Scalar v) v (v ⊗ w) -> w)
-> LinearFunction
     (Scalar v) (LinearFunction (Scalar v) v (v ⊗ w)) w
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction (Scalar v) v (v ⊗ w) -> w)
 -> LinearFunction
      (Scalar v) (LinearFunction (Scalar v) v (v ⊗ w)) w)
-> (LinearFunction (Scalar v) v (v ⊗ w) -> w)
-> LinearFunction
     (Scalar v) (LinearFunction (Scalar v) v (v ⊗ w)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) v (v ⊗ w))
  (LinearMap (Scalar v) v (v ⊗ w))
-> LinearFunction (Scalar v) v (v ⊗ w)
-> LinearMap (Scalar v) v (v ⊗ w)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) v (v ⊗ w))
  (LinearMap (Scalar v) v (v ⊗ w))
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction
                                        (LinearFunction (Scalar v) v (v ⊗ w)
 -> LinearMap (Scalar v) v (v ⊗ w))
-> (LinearMap (Scalar v) v (v ⊗ w) -> w)
-> LinearFunction (Scalar v) v (v ⊗ w)
-> w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar v) (LinearMap (Scalar v) v (v ⊗ w)) w
-> LinearMap (Scalar v) v (v ⊗ w) -> w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction (Scalar v) (LinearMap (Scalar v) v (v ⊗ w)) w
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v +> (v ⊗ w)) -+> w
contractTensorMap
  contractLinearMapAgainst :: (LinearSpace w, Scalar w ~ Scalar v)
           => Bilinear (v+>w) (w-+>v) (Scalar v)
  contractLinearMapAgainst = case ( ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v
                                  , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
      (ScalarSpaceWitness v
ScalarSpaceWitness,DualSpaceWitness v
DualSpaceWitness) -> Coercion (v +> w) (Tensor (Scalar v) (DualVector v) w)
-> LinearFunction
     (Scalar v) (v +> w) (Tensor (Scalar v) (DualVector v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (v +> w) (Tensor (Scalar v) (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor LinearFunction
  (Scalar v) (v +> w) (Tensor (Scalar v) (DualVector v) w)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) w)
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (v +> w)
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar v)
  (Tensor (Scalar v) (DualVector v) w)
  (Tensor (Scalar v) w (DualVector v))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                         LinearFunction
  (Scalar v)
  (Tensor (Scalar v) (DualVector v) w)
  (Tensor (Scalar v) w (DualVector v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) w (DualVector v))
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) w)
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar v)
  (Tensor (Scalar v) w (DualVector v))
  (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVector LinearFunction
  (Scalar v)
  (Tensor (Scalar v) w (DualVector v))
  (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v))
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) w (DualVector v))
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v)
 -> LinearFunction (Scalar v) (w -+> v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v))
     (LinearFunction (Scalar v) (w -+> v) (Scalar v))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (LinearFunction (Scalar v) (LinearMap (Scalar w) w v) (Scalar v)
-> LinearFunction (Scalar v) (w -+> v) (LinearMap (Scalar w) w v)
-> LinearFunction (Scalar v) (w -+> v) (Scalar v)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar v) (w -+> v) (LinearMap (Scalar w) w v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction)
  
  applyDualVector :: LinearSpace v
                => Bilinear (DualVector v) v (Scalar v)
  
  applyLinear :: (TensorSpace w, Scalar w ~ Scalar v)
                => Bilinear (v+>w) v w
  composeLinear :: ( LinearSpace w, TensorSpace x
                   , Scalar w ~ Scalar v, Scalar x ~ Scalar v )
           => Bilinear (w+>x) (v+>w) (v+>x)
  composeLinear = case ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v of
            ScalarSpaceWitness v
ScalarSpaceWitness -> ((w +> x) -> LinearFunction (Scalar v) (v +> w) (v +> x))
-> LinearFunction
     (Scalar v) (w +> x) (LinearFunction (Scalar v) (v +> w) (v +> x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((w +> x) -> LinearFunction (Scalar v) (v +> w) (v +> x))
 -> LinearFunction
      (Scalar v) (w +> x) (LinearFunction (Scalar v) (v +> w) (v +> x)))
-> ((w +> x) -> LinearFunction (Scalar v) (v +> w) (v +> x))
-> LinearFunction
     (Scalar v) (w +> x) (LinearFunction (Scalar v) (v +> w) (v +> x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w +> x
f -> LinearFunction (Scalar w) w x
-> LinearFunction (Scalar v) (v +> w) (v +> x)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction (Scalar v) (w +> x) (LinearFunction (Scalar w) w x)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction (Scalar v) (w +> x) (LinearFunction (Scalar w) w x)
-> (w +> x) -> LinearFunction (Scalar w) w x
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f)
  
  tensorId :: (LinearSpace w, Scalar w ~ Scalar v)
                 => (vw)+>(vw)
  
  applyTensorFunctional :: ( LinearSpace u, Scalar u ~ Scalar v )
               => Bilinear (DualVector (vu)) (vu) (Scalar v)
  
  applyTensorLinMap :: ( LinearSpace u, TensorSpace w
                       , Scalar u ~ Scalar v, Scalar w ~ Scalar v )
               => Bilinear ((vu)+>w) (vu) w 
  
  useTupleLinearSpaceComponents :: (v ~ (x,y))
         => ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
  

fmapLinearMap ::  s v w x . ( LinearSpace v, TensorSpace w, TensorSpace x
                             , Scalar v ~ s, Scalar w ~ s, Scalar x ~ s )
                 => Bilinear (LinearFunction s w x) (v+>w) (v+>x)
fmapLinearMap :: Bilinear (LinearFunction s w x) (v +> w) (v +> x)
fmapLinearMap = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
   DualSpaceWitness v
DualSpaceWitness -> (LinearFunction (Scalar x) w x
 -> LinearMap s v w -> LinearMap s v x)
-> LinearFunction
     (Scalar x)
     (LinearFunction (Scalar x) w x)
     (LinearFunction (Scalar x) (LinearMap s v w) (LinearMap s v x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction
          ((LinearFunction (Scalar x) w x
  -> LinearMap s v w -> LinearMap s v x)
 -> LinearFunction
      (Scalar x)
      (LinearFunction (Scalar x) w x)
      (LinearFunction (Scalar x) (LinearMap s v w) (LinearMap s v x)))
-> (LinearFunction (Scalar x) w x
    -> LinearMap s v w -> LinearMap s v x)
-> LinearFunction
     (Scalar x)
     (LinearFunction (Scalar x) w x)
     (LinearFunction (Scalar x) (LinearMap s v w) (LinearMap s v x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction (Scalar x) w x
f -> Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor (LinearMap s v w -> Tensor s (DualVector v) w)
-> (Tensor s (DualVector v) w -> LinearMap s v x)
-> LinearMap s v w
-> LinearMap s v x
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  s
  (Tensor (Scalar (DualVector v)) (DualVector v) w)
  (Tensor (Scalar (DualVector v)) (DualVector v) x)
-> Tensor (Scalar (DualVector v)) (DualVector v) w
-> Tensor (Scalar (DualVector v)) (DualVector v) x
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction (LinearFunction
  s
  (LinearFunction (Scalar x) w x)
  (LinearFunction
     s
     (Tensor (Scalar (DualVector v)) (DualVector v) w)
     (Tensor (Scalar (DualVector v)) (DualVector v) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  s
  (LinearFunction (Scalar x) w x)
  (LinearFunction
     s
     (Tensor (Scalar (DualVector v)) (DualVector v) w)
     (Tensor (Scalar (DualVector v)) (DualVector v) x))
-> LinearFunction (Scalar x) w x
-> LinearFunction
     s
     (Tensor (Scalar (DualVector v)) (DualVector v) w)
     (Tensor (Scalar (DualVector v)) (DualVector v) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction (Scalar x) w x
f) (Tensor s (DualVector v) w
 -> Tensor (Scalar (DualVector v)) (DualVector v) x)
-> (Tensor (Scalar (DualVector v)) (DualVector v) x
    -> LinearMap s v x)
-> Tensor s (DualVector v) w
-> LinearMap s v x
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor (Scalar (DualVector v)) (DualVector v) x) (LinearMap s v x)
-> Tensor (Scalar (DualVector v)) (DualVector v) x
-> LinearMap s v x
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor (Scalar (DualVector v)) (DualVector v) x) (LinearMap s v x)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor

instance Num' s => TensorSpace (ZeroDim s) where
  type TensorProduct (ZeroDim s) v = ZeroDim s
  scalarSpaceWitness :: ScalarSpaceWitness (ZeroDim s)
scalarSpaceWitness = case ClosedScalarWitness s
forall s. Num' s => ClosedScalarWitness s
closedScalarWitness :: ClosedScalarWitness s of
                ClosedScalarWitness s
ClosedScalarWitness -> ScalarSpaceWitness (ZeroDim s)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (ZeroDim s)
linearManifoldWitness = LinearManifoldWitness (ZeroDim s)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
                                BoundarylessWitness
#endif
  zeroTensor :: ZeroDim s ⊗ w
zeroTensor = TensorProduct (ZeroDim s) w -> Tensor s (ZeroDim s) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) w
forall s. ZeroDim s
Origin
  toFlatTensor :: ZeroDim s -+> (ZeroDim s ⊗ Scalar (ZeroDim s))
toFlatTensor = (ZeroDim s -> Tensor s (ZeroDim s) s)
-> LinearFunction s (ZeroDim s) (Tensor s (ZeroDim s) s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((ZeroDim s -> Tensor s (ZeroDim s) s)
 -> LinearFunction s (ZeroDim s) (Tensor s (ZeroDim s) s))
-> (ZeroDim s -> Tensor s (ZeroDim s) s)
-> LinearFunction s (ZeroDim s) (Tensor s (ZeroDim s) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \ZeroDim s
Origin -> TensorProduct (ZeroDim s) s -> Tensor s (ZeroDim s) s
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) s
forall s. ZeroDim s
Origin
  fromFlatTensor :: (ZeroDim s ⊗ Scalar (ZeroDim s)) -+> ZeroDim s
fromFlatTensor = (Tensor s (ZeroDim s) s -> ZeroDim s)
-> LinearFunction s (Tensor s (ZeroDim s) s) (ZeroDim s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor s (ZeroDim s) s -> ZeroDim s)
 -> LinearFunction s (Tensor s (ZeroDim s) s) (ZeroDim s))
-> (Tensor s (ZeroDim s) s -> ZeroDim s)
-> LinearFunction s (Tensor s (ZeroDim s) s) (ZeroDim s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor TensorProduct (ZeroDim s) s
Origin) -> ZeroDim s
forall s. ZeroDim s
Origin
  negateTensor :: (ZeroDim s ⊗ w) -+> (ZeroDim s ⊗ w)
negateTensor = (Tensor s (ZeroDim s) w -> Tensor s (ZeroDim s) w)
-> LinearFunction
     s (Tensor s (ZeroDim s) w) (Tensor s (ZeroDim s) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction Tensor s (ZeroDim s) w -> Tensor s (ZeroDim s) w
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  scaleTensor :: Bilinear (Scalar (ZeroDim s)) (ZeroDim s ⊗ w) (ZeroDim s ⊗ w)
scaleTensor = Bilinear (Scalar (ZeroDim s)) (ZeroDim s ⊗ w) (ZeroDim s ⊗ w)
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  addTensors :: (ZeroDim s ⊗ w) -> (ZeroDim s ⊗ w) -> ZeroDim s ⊗ w
addTensors (Tensor TensorProduct (ZeroDim s) w
Origin) (Tensor TensorProduct (ZeroDim s) w
Origin) = TensorProduct (ZeroDim s) w -> Tensor s (ZeroDim s) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) w
forall s. ZeroDim s
Origin
  subtractTensors :: (ZeroDim s ⊗ w) -> (ZeroDim s ⊗ w) -> ZeroDim s ⊗ w
subtractTensors (Tensor TensorProduct (ZeroDim s) w
Origin) (Tensor TensorProduct (ZeroDim s) w
Origin) = TensorProduct (ZeroDim s) w -> Tensor s (ZeroDim s) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) w
forall s. ZeroDim s
Origin
  tensorProduct :: Bilinear (ZeroDim s) w (ZeroDim s ⊗ w)
tensorProduct = Bilinear (ZeroDim s) w (ZeroDim s ⊗ w)
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  transposeTensor :: (ZeroDim s ⊗ w) -+> (w ⊗ ZeroDim s)
transposeTensor = (ZeroDim s ⊗ w) -+> (w ⊗ ZeroDim s)
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  fmapTensor :: Bilinear (w -+> x) (ZeroDim s ⊗ w) (ZeroDim s ⊗ x)
fmapTensor = Bilinear (w -+> x) (ZeroDim s ⊗ w) (ZeroDim s ⊗ x)
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  fzipTensorWith :: Bilinear
  ((w, x) -+> u) (ZeroDim s ⊗ w, ZeroDim s ⊗ x) (ZeroDim s ⊗ u)
fzipTensorWith = Bilinear
  ((w, x) -+> u) (ZeroDim s ⊗ w, ZeroDim s ⊗ x) (ZeroDim s ⊗ u)
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  coerceFmapTensorProduct :: p (ZeroDim s)
-> Coercion a b
-> Coercion
     (TensorProduct (ZeroDim s) a) (TensorProduct (ZeroDim s) b)
coerceFmapTensorProduct p (ZeroDim s)
_ Coercion a b
Coercion = Coercion
  (TensorProduct (ZeroDim s) a) (TensorProduct (ZeroDim s) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  wellDefinedVector :: ZeroDim s -> Maybe (ZeroDim s)
wellDefinedVector ZeroDim s
Origin = ZeroDim s -> Maybe (ZeroDim s)
forall a. a -> Maybe a
Just ZeroDim s
forall s. ZeroDim s
Origin
  wellDefinedTensor :: (ZeroDim s ⊗ w) -> Maybe (ZeroDim s ⊗ w)
wellDefinedTensor (Tensor TensorProduct (ZeroDim s) w
Origin) = Tensor s (ZeroDim s) w -> Maybe (Tensor s (ZeroDim s) w)
forall a. a -> Maybe a
Just (TensorProduct (ZeroDim s) w -> Tensor s (ZeroDim s) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) w
forall s. ZeroDim s
Origin)
instance Num' s => LinearSpace (ZeroDim s) where
  type DualVector (ZeroDim s) = ZeroDim s
  dualSpaceWitness :: DualSpaceWitness (ZeroDim s)
dualSpaceWitness = case ClosedScalarWitness s
forall s. Num' s => ClosedScalarWitness s
closedScalarWitness :: ClosedScalarWitness s of
                ClosedScalarWitness s
ClosedScalarWitness -> DualSpaceWitness (ZeroDim s)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  linearId :: ZeroDim s +> ZeroDim s
linearId = TensorProduct (DualVector (ZeroDim s)) (ZeroDim s)
-> LinearMap s (ZeroDim s) (ZeroDim s)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (ZeroDim s)) (ZeroDim s)
forall s. ZeroDim s
Origin
  idTensor :: ZeroDim s ⊗ DualVector (ZeroDim s)
idTensor = TensorProduct (ZeroDim s) (ZeroDim s)
-> Tensor s (ZeroDim s) (ZeroDim s)
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (ZeroDim s) (ZeroDim s)
forall s. ZeroDim s
Origin
  tensorId :: (ZeroDim s ⊗ w) +> (ZeroDim s ⊗ w)
tensorId = TensorProduct
  (DualVector (Tensor s (ZeroDim s) w)) (Tensor s (ZeroDim s) w)
-> LinearMap s (Tensor s (ZeroDim s) w) (Tensor s (ZeroDim s) w)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct
  (DualVector (Tensor s (ZeroDim s) w)) (Tensor s (ZeroDim s) w)
forall s. ZeroDim s
Origin
  toLinearForm :: DualVector (ZeroDim s) -+> (ZeroDim s +> Scalar (ZeroDim s))
toLinearForm = (ZeroDim s -> LinearMap s (ZeroDim s) s)
-> LinearFunction s (ZeroDim s) (LinearMap s (ZeroDim s) s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((ZeroDim s -> LinearMap s (ZeroDim s) s)
 -> LinearFunction s (ZeroDim s) (LinearMap s (ZeroDim s) s))
-> (LinearMap s (ZeroDim s) s
    -> ZeroDim s -> LinearMap s (ZeroDim s) s)
-> LinearMap s (ZeroDim s) s
-> LinearFunction s (ZeroDim s) (LinearMap s (ZeroDim s) s)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearMap s (ZeroDim s) s -> ZeroDim s -> LinearMap s (ZeroDim s) s
forall (a :: * -> * -> *) b x.
(WellPointed a, Object a b, ObjectPoint a x) =>
x -> a b x
const (LinearMap s (ZeroDim s) s
 -> LinearFunction s (ZeroDim s) (LinearMap s (ZeroDim s) s))
-> LinearMap s (ZeroDim s) s
-> LinearFunction s (ZeroDim s) (LinearMap s (ZeroDim s) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ TensorProduct (DualVector (ZeroDim s)) s
-> LinearMap s (ZeroDim s) s
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (ZeroDim s)) s
forall s. ZeroDim s
Origin
  fromLinearForm :: (ZeroDim s +> Scalar (ZeroDim s)) -+> DualVector (ZeroDim s)
fromLinearForm = (ZeroDim s +> Scalar (ZeroDim s)) -+> DualVector (ZeroDim s)
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  coerceDoubleDual :: Coercion (ZeroDim s) (DualVector (DualVector (ZeroDim s)))
coerceDoubleDual = Coercion (ZeroDim s) (DualVector (DualVector (ZeroDim s)))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  contractTensorMap :: (ZeroDim s +> (ZeroDim s ⊗ w)) -+> w
contractTensorMap = (ZeroDim s +> (ZeroDim s ⊗ w)) -+> w
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  contractMapTensor :: (ZeroDim s ⊗ (ZeroDim s +> w)) -+> w
contractMapTensor = (ZeroDim s ⊗ (ZeroDim s +> w)) -+> w
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  contractLinearMapAgainst :: Bilinear (ZeroDim s +> w) (w -+> ZeroDim s) (Scalar (ZeroDim s))
contractLinearMapAgainst = Bilinear (ZeroDim s +> w) (w -+> ZeroDim s) (Scalar (ZeroDim s))
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  applyDualVector :: Bilinear (DualVector (ZeroDim s)) (ZeroDim s) (Scalar (ZeroDim s))
applyDualVector = Bilinear (DualVector (ZeroDim s)) (ZeroDim s) (Scalar (ZeroDim s))
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  applyLinear :: Bilinear (ZeroDim s +> w) (ZeroDim s) w
applyLinear = Bilinear (ZeroDim s +> w) (ZeroDim s) w
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  applyTensorFunctional :: Bilinear
  (DualVector (ZeroDim s ⊗ u)) (ZeroDim s ⊗ u) (Scalar (ZeroDim s))
applyTensorFunctional = Bilinear
  (DualVector (ZeroDim s ⊗ u)) (ZeroDim s ⊗ u) (Scalar (ZeroDim s))
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  applyTensorLinMap :: Bilinear ((ZeroDim s ⊗ u) +> w) (ZeroDim s ⊗ u) w
applyTensorLinMap = Bilinear ((ZeroDim s ⊗ u) +> w) (ZeroDim s ⊗ u) w
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  composeLinear :: Bilinear (w +> x) (ZeroDim s +> w) (ZeroDim s +> x)
composeLinear = Bilinear (w +> x) (ZeroDim s +> w) (ZeroDim s +> x)
forall v a b. AdditiveGroup v => Bilinear a b v
biConst0
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError


-- | The tensor product between one space's dual space and another space is the
-- space spanned by vector–dual-vector pairs, in
-- <https://en.wikipedia.org/wiki/Bra%E2%80%93ket_notationa bra-ket notation>
-- written as
-- 
-- @
-- m = ∑ |w⟩⟨v|
-- @
-- 
-- Any linear mapping can be written as such a (possibly infinite) sum. The
-- 'TensorProduct' data structure only stores the linear independent parts
-- though; for simple finite-dimensional spaces this means e.g. @'LinearMap' ℝ ℝ³ ℝ³@
-- effectively boils down to an ordinary matrix type, namely an array of
-- column-vectors @|w⟩@.
-- 
-- (The @⟨v|@ dual-vectors are then simply assumed to come from the canonical basis.)
-- 
-- For bigger spaces, the tensor product may be implemented in a more efficient
-- sparse structure; this can be defined in the 'TensorSpace' instance.
newtype LinearMap s v w = LinearMap {LinearMap s v w -> TensorProduct (DualVector v) w
getLinearMap :: TensorProduct (DualVector v) w}

-- | Tensor products are most interesting because they can be used to implement
--   linear mappings, but they also form a useful vector space on their own right.
newtype Tensor s v w = Tensor {Tensor s v w -> TensorProduct v w
getTensorProduct :: TensorProduct v w}

asTensor :: Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor :: Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor = Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
fromTensor :: Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor :: Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor = Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

asLinearMap ::  s v w . (LinearSpace v, Scalar v ~ s)
           => Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap :: Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
                DualSpaceWitness v
DualSpaceWitness -> Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
fromLinearMap ::  s v w . (LinearSpace v, Scalar v ~ s)
           => Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap :: Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
                DualSpaceWitness v
DualSpaceWitness -> Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion


pseudoFmapTensorLHS :: (TensorProduct v w ~ TensorProduct v' w)
           => c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS :: c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS c v v'
_ = Coercion (Tensor s v w) (Tensor s v' w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

pseudoPrecomposeLinmap :: (TensorProduct (DualVector v) w ~ TensorProduct (DualVector v') w)
           => c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap :: c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap c v' v
_ = Coercion (LinearMap s v w) (LinearMap s v' w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

envTensorLHSCoercion :: ( TensorProduct v w ~ TensorProduct v' w
                        , TensorProduct v w' ~ TensorProduct v' w' )
           => c v v' -> LinearFunction s' (Tensor s v w) (Tensor s v w')
                     -> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion :: c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion c v v'
i (LinearFunction Tensor s v w -> Tensor s v w'
f) = (Tensor s v' w -> Tensor s v' w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor s v' w -> Tensor s v' w')
 -> LinearFunction s' (Tensor s v' w) (Tensor s v' w'))
-> (Tensor s v' w -> Tensor s v' w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Tensor s v w -> Tensor s v w') -> Tensor s v' w -> Tensor s v' w'
coerce Tensor s v w -> Tensor s v w'
f

envLinmapPrecomposeCoercion
       :: ( TensorProduct (DualVector v) w ~ TensorProduct (DualVector v') w
          , TensorProduct (DualVector v) w' ~ TensorProduct (DualVector v') w' )
           => c v' v -> LinearFunction s' (LinearMap s v w) (LinearMap s v w')
                     -> LinearFunction s' (LinearMap s v' w) (LinearMap s v' w')
envLinmapPrecomposeCoercion :: c v' v
-> LinearFunction s' (LinearMap s v w) (LinearMap s v w')
-> LinearFunction s' (LinearMap s v' w) (LinearMap s v' w')
envLinmapPrecomposeCoercion c v' v
i (LinearFunction LinearMap s v w -> LinearMap s v w'
f) = (LinearMap s v' w -> LinearMap s v' w')
-> LinearFunction s' (LinearMap s v' w) (LinearMap s v' w')
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearMap s v' w -> LinearMap s v' w')
 -> LinearFunction s' (LinearMap s v' w) (LinearMap s v' w'))
-> (LinearMap s v' w -> LinearMap s v' w')
-> LinearFunction s' (LinearMap s v' w) (LinearMap s v' w')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearMap s v w -> LinearMap s v w')
-> LinearMap s v' w -> LinearMap s v' w'
coerce LinearMap s v w -> LinearMap s v w'
f

-- | Infix synonym for 'LinearMap', without explicit mention of the scalar type.
type v +> w = LinearMap (Scalar v) v w

-- | Infix synonym for 'Tensor', without explicit mention of the scalar type.
type v  w = Tensor (Scalar v) v w

-- | The workhorse of this package: most functions here work on vector
--   spaces that fulfill the @'LSpace' v@ constraint.
-- 
--   In summary, this is a 'VectorSpace' with an implementation for @'TensorProduct' v w@,
--   for any other space @w@, and with a 'DualVector' space. This fulfills
--   @'DualVector' ('DualVector' v) ~ v@ (this constraint is encapsulated in
--   'DualSpaceWitness').
-- 
--   To make a new space of yours an 'LSpace', you must define instances of
--   'TensorSpace' and 'LinearSpace'. In fact, 'LSpace' is equivalent to
--   'LinearSpace', but makes the condition explicit that the scalar and dual vectors
--   also form a linear space. 'LinearSpace' only stores that constraint in
--   'dualSpaceWitness' (to avoid UndecidableSuperclasses).
type LSpace v = ( LinearSpace v, LinearSpace (Scalar v), LinearSpace (DualVector v)
                , Num' (Scalar v) )

instance (LinearSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => AdditiveGroup (LinearMap s v w) where
  zeroV :: LinearMap s v w
zeroV = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
            DualSpaceWitness v
DualSpaceWitness -> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Tensor s (DualVector v) w -> LinearMap s v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (DualVector v) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  LinearMap s v w
m^+^ :: LinearMap s v w -> LinearMap s v w -> LinearMap s v w
^+^LinearMap s v w
n = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
            DualSpaceWitness v
DualSpaceWitness -> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Tensor s (DualVector v) w -> LinearMap s v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensorCoercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearMap s v w
m) Tensor s (DualVector v) w
-> Tensor s (DualVector v) w -> Tensor s (DualVector v) w
forall v. AdditiveGroup v => v -> v -> v
^+^ (Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensorCoercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearMap s v w
n)
  LinearMap s v w
m^-^ :: LinearMap s v w -> LinearMap s v w -> LinearMap s v w
^-^LinearMap s v w
n = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
            DualSpaceWitness v
DualSpaceWitness -> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Tensor s (DualVector v) w -> LinearMap s v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensorCoercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearMap s v w
m) Tensor s (DualVector v) w
-> Tensor s (DualVector v) w -> Tensor s (DualVector v) w
forall v. AdditiveGroup v => v -> v -> v
^-^ (Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensorCoercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearMap s v w
n)
  negateV :: LinearMap s v w -> LinearMap s v w
negateV = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
            DualSpaceWitness v
DualSpaceWitness -> (Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensorCoercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Tensor s (DualVector v) w -> LinearMap s v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$) (Tensor s (DualVector v) w -> LinearMap s v w)
-> (LinearMap s v w -> Tensor s (DualVector v) w)
-> LinearMap s v w
-> LinearMap s v w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Tensor s (DualVector v) w -> Tensor s (DualVector v) w
forall v. AdditiveGroup v => v -> v
negateV (Tensor s (DualVector v) w -> Tensor s (DualVector v) w)
-> (LinearMap s v w -> Tensor s (DualVector v) w)
-> LinearMap s v w
-> Tensor s (DualVector v) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensorCoercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$)
instance  v w s . (LinearSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => VectorSpace (LinearMap s v w) where
  type Scalar (LinearMap s v w) = s
  Scalar (LinearMap s v w)
μ*^ :: Scalar (LinearMap s v w) -> LinearMap s v w -> LinearMap s v w
*^LinearMap s v w
v = case ( DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v
              , ScalarSpaceWitness w
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness w ) of
            (DualSpaceWitness v
DualSpaceWitness, ScalarSpaceWitness w
ScalarSpaceWitness)
                -> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Tensor s (DualVector v) w -> LinearMap s v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  s
  s
  (LinearFunction
     s (Tensor s (DualVector v) w) (Tensor s (DualVector v) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  s
  s
  (LinearFunction
     s (Tensor s (DualVector v) w) (Tensor s (DualVector v) w))
-> s
-> LinearFunction
     s (Tensor s (DualVector v) w) (Tensor s (DualVector v) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>s
Scalar (LinearMap s v w)
μ) LinearFunction
  s (Tensor s (DualVector v) w) (Tensor s (DualVector v) w)
-> Tensor s (DualVector v) w -> Tensor s (DualVector v) w
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> LinearMap s v w -> Tensor s (DualVector v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s v w
v
instance  v w s . (LinearSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => Semimanifold (LinearMap s v w) where
  type Needle (LinearMap s v w) = LinearMap s v w
#if !MIN_VERSION_manifolds_core(0,6,0)
  toInterior = pure
  fromInterior = id
  translateP = Tagged (^+^)
#endif
  .+~^ :: LinearMap s v w -> Needle (LinearMap s v w) -> LinearMap s v w
(.+~^) = LinearMap s v w -> Needle (LinearMap s v w) -> LinearMap s v w
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance  v w s . (LinearSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => PseudoAffine (LinearMap s v w) where
  LinearMap s v w
f.-~. :: LinearMap s v w
-> LinearMap s v w -> Maybe (Needle (LinearMap s v w))
.-~.LinearMap s v w
g = LinearMap s v w -> Maybe (LinearMap s v w)
forall (m :: * -> *) a. Monad m (->) => a -> m a
return (LinearMap s v w -> Maybe (LinearMap s v w))
-> LinearMap s v w -> Maybe (LinearMap s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s v w
fLinearMap s v w -> LinearMap s v w -> LinearMap s v w
forall v. AdditiveGroup v => v -> v -> v
^-^LinearMap s v w
g
  .-~! :: LinearMap s v w -> LinearMap s v w -> Needle (LinearMap s v w)
(.-~!) = LinearMap s v w -> LinearMap s v w -> Needle (LinearMap s v w)
forall v. AdditiveGroup v => v -> v -> v
(^-^)

instance (TensorSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => AdditiveGroup (Tensor s v w) where
  zeroV :: Tensor s v w
zeroV = Tensor s v w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  ^+^ :: Tensor s v w -> Tensor s v w -> Tensor s v w
(^+^) = Tensor s v w -> Tensor s v w -> Tensor s v w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
addTensors
  ^-^ :: Tensor s v w -> Tensor s v w -> Tensor s v w
(^-^) = Tensor s v w -> Tensor s v w -> Tensor s v w
forall v w.
(TensorSpace v, TensorSpace v, TensorSpace w,
 Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
subtractTensors
  negateV :: Tensor s v w -> Tensor s v w
negateV = LinearFunction s (Tensor s v w) (Tensor s v w)
-> Tensor s v w -> Tensor s v w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction s (Tensor s v w) (Tensor s v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensor
instance (TensorSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => VectorSpace (Tensor s v w) where
  type Scalar (Tensor s v w) = s
  Scalar (Tensor s v w)
μ*^ :: Scalar (Tensor s v w) -> Tensor s v w -> Tensor s v w
*^Tensor s v w
t = (LinearFunction
  (Scalar s)
  s
  (LinearFunction (Scalar s) (Tensor s v w) (Tensor s v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar s)
  s
  (LinearFunction (Scalar s) (Tensor s v w) (Tensor s v w))
-> s -> LinearFunction (Scalar s) (Tensor s v w) (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>s
Scalar (Tensor s v w)
μ)LinearFunction (Scalar s) (Tensor s v w) (Tensor s v w)
-> Tensor s v w -> Tensor s v w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor s v w
t
instance (TensorSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => Semimanifold (Tensor s v w) where
  type Needle (Tensor s v w) = Tensor s v w
#if !MIN_VERSION_manifolds_core(0,6,0)
  toInterior = pure
  fromInterior = id
  translateP = Tagged (^+^)
#endif
  .+~^ :: Tensor s v w -> Needle (Tensor s v w) -> Tensor s v w
(.+~^) = Tensor s v w -> Needle (Tensor s v w) -> Tensor s v w
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance (TensorSpace v, TensorSpace w, Scalar v~s, Scalar w~s)
               => PseudoAffine (Tensor s v w) where
  Tensor s v w
f.-~. :: Tensor s v w -> Tensor s v w -> Maybe (Needle (Tensor s v w))
.-~.Tensor s v w
g = Tensor s v w -> Maybe (Tensor s v w)
forall (m :: * -> *) a. Monad m (->) => a -> m a
return (Tensor s v w -> Maybe (Tensor s v w))
-> Tensor s v w -> Maybe (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s v w
fTensor s v w -> Tensor s v w -> Tensor s v w
forall v. AdditiveGroup v => v -> v -> v
^-^Tensor s v w
g
  .-~! :: Tensor s v w -> Tensor s v w -> Needle (Tensor s v w)
(.-~!) = Tensor s v w -> Tensor s v w -> Needle (Tensor s v w)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
  
infixr 6 , >+<, <⊕

(<⊕) :: (uw) -> (vw) -> (u,v)w
u ⊗ w
m <⊕ :: (u ⊗ w) -> (v ⊗ w) -> (u, v) ⊗ w
<⊕ v ⊗ w
n = (u ⊗ w, v ⊗ w) -> Tensor (Scalar u) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((u ⊗ w, v ⊗ w) -> Tensor (Scalar u) (u, v) w)
-> (u ⊗ w, v ⊗ w) -> Tensor (Scalar u) (u, v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (u ⊗ w
m, v ⊗ w
n)

-- | The dual operation to the tuple constructor, or rather to the
--   '&&&' fanout operation: evaluate two (linear) functions in parallel
--   and sum up the results.
--   The typical use is to concatenate “row vectors” in a matrix definition.
(⊕) :: (u+>w) -> (v+>w) -> (u,v)+>w
LinearMap TensorProduct (DualVector u) w
m ⊕ :: (u +> w) -> (v +> w) -> (u, v) +> w
 LinearMap TensorProduct (DualVector v) w
n = (DualVector u ⊗ w, DualVector v ⊗ w)
-> LinearMap (Scalar u) (u, v) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap ((DualVector u ⊗ w, DualVector v ⊗ w)
 -> LinearMap (Scalar u) (u, v) w)
-> (DualVector u ⊗ w, DualVector v ⊗ w)
-> LinearMap (Scalar u) (u, v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (TensorProduct (DualVector u) w -> DualVector u ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (DualVector u) w
m, TensorProduct (DualVector v) w -> DualVector v ⊗ w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (DualVector v) w
n)

-- | ASCII version of '⊕'
(>+<) :: (u+>w) -> (v+>w) -> (u,v)+>w
>+< :: (u +> w) -> (v +> w) -> (u, v) +> w
(>+<) = (u +> w) -> (v +> w) -> (u, v) +> w
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
(⊕)


instance Category (LinearMap s) where
  type Object (LinearMap s) v = (LinearSpace v, Scalar v ~ s)
  id :: LinearMap s a a
id = LinearMap s a a
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  . :: LinearMap s b c -> LinearMap s a b -> LinearMap s a c
(.) = DualSpaceWitness a
-> LinearMap s b c -> LinearMap s a b -> LinearMap s a c
forall v w x.
(LinearSpace v, Scalar v ~ s, LinearSpace w, Scalar w ~ s,
 TensorSpace x, Scalar x ~ s) =>
DualSpaceWitness v
-> LinearMap s w x -> LinearMap s v w -> LinearMap s v x
lmc DualSpaceWitness a
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where lmc ::  v w x . ( LinearSpace v, Scalar v ~ s
                          , LinearSpace w, Scalar w ~ s
                          , TensorSpace x, Scalar x ~ s )
              => DualSpaceWitness v
                   -> LinearMap s w x -> LinearMap s v w -> LinearMap s v x
         lmc :: DualSpaceWitness v
-> LinearMap s w x -> LinearMap s v w -> LinearMap s v x
lmc DualSpaceWitness v
DualSpaceWitness = LinearFunction
  s (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x)
-> LinearMap (Scalar v) v w -> LinearMap (Scalar v) v x
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction (LinearFunction
   s (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x)
 -> LinearMap (Scalar v) v w -> LinearMap (Scalar v) v x)
-> (LinearMap (Scalar w) w x
    -> LinearFunction
         s (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x))
-> LinearMap (Scalar w) w x
-> LinearMap (Scalar v) v w
-> LinearMap (Scalar v) v x
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s
  (LinearMap (Scalar w) w x)
  (LinearFunction
     (Scalar w) (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x))
-> LinearMap (Scalar w) w x
-> LinearFunction
     (Scalar w) (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  s
  (LinearMap (Scalar w) w x)
  (LinearFunction
     (Scalar w) (LinearMap (Scalar v) v w) (LinearMap (Scalar v) v x))
forall v w x.
(LinearSpace v, LinearSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w +> x) (v +> w) (v +> x)
composeLinear
instance Num' s => Cartesian (LinearMap s) where
  type UnitObject (LinearMap s) = ZeroDim s
  swap :: LinearMap s (a, b) (b, a)
swap = (LinearFunction s a (b, a)
-> LinearFunction s (LinearMap s a a) (LinearMap s a (b, a))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s a b
forall w s v. AdditiveGroup w => LinearFunction s v w
const0LinearFunction s a b
-> LinearFunction s a a -> LinearFunction s a (b, a)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction s a a
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id) LinearFunction s (LinearMap s a a) (LinearMap s a (b, a))
-> LinearMap s a a -> LinearMap s a (b, a)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s a a
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id) LinearMap (Scalar a) a (b, a) -> (b +> (b, a)) -> (a, b) +> (b, a)
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
 (LinearFunction s b (b, a)
-> LinearFunction s (LinearMap s b b) (LinearMap s b (b, a))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s b b
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
idLinearFunction s b b
-> LinearFunction s b a -> LinearFunction s b (b, a)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction s b a
forall w s v. AdditiveGroup w => LinearFunction s v w
const0) LinearFunction s (LinearMap s b b) (LinearMap s b (b, a))
-> LinearMap s b b -> LinearMap s b (b, a)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s b b
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id)
  attachUnit :: LinearMap s a (a, unit)
attachUnit = LinearFunction s a (a, unit)
-> LinearFunction s (LinearMap s a a) (LinearMap s a (a, unit))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s a a
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
idLinearFunction s a a
-> LinearFunction s a unit -> LinearFunction s a (a, unit)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction s a unit
forall w s v. AdditiveGroup w => LinearFunction s v w
const0) LinearFunction s (LinearMap s a a) (LinearMap s a (a, unit))
-> LinearMap s a a -> LinearMap s a (a, unit)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s a a
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  detachUnit :: LinearMap s (a, unit) a
detachUnit = LinearMap s (a, unit) a
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) x
fst
  regroup :: LinearMap s (a, (b, c)) ((a, b), c)
regroup = LinearFunction
  (Scalar a)
  (LinearFunction s (a, (b, c)) ((a, b), c))
  (LinearMap s (a, (b, c)) ((a, b), c))
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar a)
  (LinearFunction s (a, (b, c)) ((a, b), c))
  (LinearMap s (a, (b, c)) ((a, b), c))
-> LinearFunction s (a, (b, c)) ((a, b), c)
-> LinearMap s (a, (b, c)) ((a, b), c)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ ((a, (b, c)) -> ((a, b), c))
-> LinearFunction s (a, (b, c)) ((a, b), c)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (a, (b, c)) -> ((a, b), c)
forall (k :: * -> * -> *) a b c.
(Cartesian k, ObjectPair k a b, ObjectPair k b c,
 ObjectPair k a (b, c), ObjectPair k (a, b) c) =>
k (a, (b, c)) ((a, b), c)
regroup
  regroup' :: LinearMap s ((a, b), c) (a, (b, c))
regroup' = LinearFunction
  (Scalar a)
  (LinearFunction s ((a, b), c) (a, (b, c)))
  (LinearMap s ((a, b), c) (a, (b, c)))
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar a)
  (LinearFunction s ((a, b), c) (a, (b, c)))
  (LinearMap s ((a, b), c) (a, (b, c)))
-> LinearFunction s ((a, b), c) (a, (b, c))
-> LinearMap s ((a, b), c) (a, (b, c))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (((a, b), c) -> (a, (b, c)))
-> LinearFunction s ((a, b), c) (a, (b, c))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((a, b), c) -> (a, (b, c))
forall (k :: * -> * -> *) a b c.
(Cartesian k, ObjectPair k a b, ObjectPair k b c,
 ObjectPair k a (b, c), ObjectPair k (a, b) c) =>
k ((a, b), c) (a, (b, c))
regroup'
instance Num' s => Morphism (LinearMap s) where
  LinearMap s b c
f *** :: LinearMap s b c -> LinearMap s b' c' -> LinearMap s (b, b') (c, c')
*** LinearMap s b' c'
g = (LinearFunction s c (c, c')
-> LinearFunction s (LinearMap s b c) (LinearMap s b (c, c'))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s c c
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
idLinearFunction s c c
-> LinearFunction s c c' -> LinearFunction s c (c, c')
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction s c c'
forall w s v. AdditiveGroup w => LinearFunction s v w
const0) LinearFunction s (LinearMap s b c) (LinearMap s b (c, c'))
-> LinearMap s b c -> LinearMap s b (c, c')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s b c
f) LinearMap (Scalar b) b (c, c')
-> (b' +> (c, c')) -> (b, b') +> (c, c')
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
 (LinearFunction s c' (c, c')
-> LinearFunction s (LinearMap s b' c') (LinearMap s b' (c, c'))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s c' c
forall w s v. AdditiveGroup w => LinearFunction s v w
const0LinearFunction s c' c
-> LinearFunction s c' c' -> LinearFunction s c' (c, c')
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction s c' c'
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id) LinearFunction s (LinearMap s b' c') (LinearMap s b' (c, c'))
-> LinearMap s b' c' -> LinearMap s b' (c, c')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s b' c'
g)
instance  s . Num' s => PreArrow (LinearMap s) where
  &&& :: LinearMap s b c -> LinearMap s b c' -> LinearMap s b (c, c')
(&&&) = LinearMap s b c -> LinearMap s b c' -> LinearMap s b (c, c')
forall u v w.
(LinearSpace u, LinearSpace v, LinearSpace w, Scalar u ~ s,
 Scalar v ~ s, Scalar w ~ s) =>
LinearMap s u v -> LinearMap s u w -> LinearMap s u (v, w)
lmFanout
   where lmFanout ::  u v w . ( LinearSpace u, LinearSpace v, LinearSpace w
                               , Scalar u~s, Scalar v~s, Scalar w~s )
           => LinearMap s u v -> LinearMap s u w -> LinearMap s u (v,w)
         lmFanout :: LinearMap s u v -> LinearMap s u w -> LinearMap s u (v, w)
lmFanout LinearMap s u v
f LinearMap s u w
g = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                             , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v
                             , DualSpaceWitness w
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness w ) of
             (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness, DualSpaceWitness w
DualSpaceWitness)
                 -> Coercion (Tensor s (DualVector u) (v, w)) (LinearMap s u (v, w))
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector u) (v, w)) (LinearMap s u (v, w))
-> Tensor s (DualVector u) (v, w) -> LinearMap s u (v, w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) (v, w) (v, w))
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar (DualVector u)) (DualVector u) v,
      Tensor (Scalar (DualVector u)) (DualVector u) w)
     (Tensor s (DualVector u) (v, w)))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) (v, w) (v, w))
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar (DualVector u)) (DualVector u) v,
      Tensor (Scalar (DualVector u)) (DualVector u) w)
     (Tensor s (DualVector u) (v, w)))
-> LinearFunction (Scalar v) (v, w) (v, w)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar (DualVector u)) (DualVector u) v,
      Tensor (Scalar (DualVector u)) (DualVector u) w)
     (Tensor s (DualVector u) (v, w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearFunction (Scalar v) (v, w) (v, w)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id) LinearFunction
  (Scalar v)
  (Tensor (Scalar (DualVector u)) (DualVector u) v,
   Tensor (Scalar (DualVector u)) (DualVector u) w)
  (Tensor s (DualVector u) (v, w))
-> (Tensor (Scalar (DualVector u)) (DualVector u) v,
    Tensor (Scalar (DualVector u)) (DualVector u) w)
-> Tensor s (DualVector u) (v, w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (LinearMap s u v) (Tensor (Scalar (DualVector u)) (DualVector u) v)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap s u v) (Tensor (Scalar (DualVector u)) (DualVector u) v)
-> LinearMap s u v
-> Tensor (Scalar (DualVector u)) (DualVector u) v
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s u v
f, Coercion
  (LinearMap s u w) (Tensor (Scalar (DualVector u)) (DualVector u) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap s u w) (Tensor (Scalar (DualVector u)) (DualVector u) w)
-> LinearMap s u w
-> Tensor (Scalar (DualVector u)) (DualVector u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s u w
g)
  terminal :: LinearMap s b (UnitObject (LinearMap s))
terminal = LinearMap s b (UnitObject (LinearMap s))
forall v. AdditiveGroup v => v
zeroV
  fst :: LinearMap s (x, y) x
fst = LinearFunction
  (Scalar x)
  (LinearFunction (Scalar x) (x, y) x)
  (LinearMap s (x, y) x)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar x)
  (LinearFunction (Scalar x) (x, y) x)
  (LinearMap s (x, y) x)
-> LinearFunction (Scalar x) (x, y) x -> LinearMap s (x, y) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction (Scalar x) (x, y) x
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) x
fst
  snd :: LinearMap s (x, y) y
snd = LinearFunction
  (Scalar x)
  (LinearFunction (Scalar y) (x, y) y)
  (LinearMap s (x, y) y)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar x)
  (LinearFunction (Scalar y) (x, y) y)
  (LinearMap s (x, y) y)
-> LinearFunction (Scalar y) (x, y) y -> LinearMap s (x, y) y
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction (Scalar y) (x, y) y
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) y
snd
instance Num' s => EnhancedCat (->) (LinearMap s) where
  arr :: LinearMap s b c -> b -> c
arr LinearMap s b c
m = LinearFunction s b c -> b -> c
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction s b c -> b -> c) -> LinearFunction s b c -> b -> c
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction (Scalar b) (LinearMap s b c) (LinearFunction s b c)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearFunction (Scalar b) (LinearMap s b c) (LinearFunction s b c)
-> LinearMap s b c -> LinearFunction s b c
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s b c
m
instance Num' s => EnhancedCat (LinearFunction s) (LinearMap s) where
  arr :: LinearMap s b c -> LinearFunction s b c
arr LinearMap s b c
m = LinearFunction (Scalar b) (LinearMap s b c) (LinearFunction s b c)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearFunction (Scalar b) (LinearMap s b c) (LinearFunction s b c)
-> LinearMap s b c -> LinearFunction s b c
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s b c
m
instance Num' s => EnhancedCat (LinearMap s) (LinearFunction s) where
  arr :: LinearFunction s b c -> LinearMap s b c
arr LinearFunction s b c
m = LinearFunction (Scalar b) (LinearFunction s b c) (LinearMap s b c)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction (Scalar b) (LinearFunction s b c) (LinearMap s b c)
-> LinearFunction s b c -> LinearMap s b c
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s b c
m





  
instance  u v . ( TensorSpace u, TensorSpace v, Scalar u ~ Scalar v )
                       => TensorSpace (u,v) where
  type TensorProduct (u,v) w = (uw, vw)
  scalarSpaceWitness :: ScalarSpaceWitness (u, v)
scalarSpaceWitness = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                            , ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, ScalarSpaceWitness v
ScalarSpaceWitness) -> ScalarSpaceWitness (u, v)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (u, v)
linearManifoldWitness = case ( LinearManifoldWitness u
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness u
                            , LinearManifoldWitness v
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness v ) of
       ( LinearManifoldWitness u
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
          BoundarylessWitness
#endif
        ,LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
          BoundarylessWitness
#endif
        )
         -> LinearManifoldWitness (u, v)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
             BoundarylessWitness
#endif
  zeroTensor :: (u, v) ⊗ w
zeroTensor = u ⊗ w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor (u ⊗ w) -> (v ⊗ w) -> (u, v) ⊗ w
forall u w v. (u ⊗ w) -> (v ⊗ w) -> (u, v) ⊗ w
<⊕ v ⊗ w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  scaleTensor :: Bilinear (Scalar (u, v)) ((u, v) ⊗ w) ((u, v) ⊗ w)
scaleTensor = (Scalar v
 -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
-> Bilinear
     (Scalar v)
     (Tensor (Scalar v) (u, v) w)
     (Tensor (Scalar v) (u, v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((Scalar v
  -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
 -> Bilinear
      (Scalar v)
      (Tensor (Scalar v) (u, v) w)
      (Tensor (Scalar v) (u, v) w))
-> (Scalar v
    -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
-> Bilinear
     (Scalar v)
     (Tensor (Scalar v) (u, v) w)
     (Tensor (Scalar v) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar v
μ (Tensor (v,w)) ->
                 TensorProduct (u, v) w -> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( (LinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar u) u w)
     (Tensor (Scalar u) u w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar u) u w)
     (Tensor (Scalar u) u w))
-> Scalar v
-> LinearFunction
     (Scalar (Scalar v)) (Tensor (Scalar u) u w) (Tensor (Scalar u) u w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar v
μ)LinearFunction
  (Scalar (Scalar v)) (Tensor (Scalar u) u w) (Tensor (Scalar u) u w)
-> Tensor (Scalar u) u w -> Tensor (Scalar u) u w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u w
v, (LinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) v w)
     (Tensor (Scalar v) v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) v w)
     (Tensor (Scalar v) v w))
-> Scalar v
-> LinearFunction
     (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar v
μ)LinearFunction
  (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v w
w )
  negateTensor :: ((u, v) ⊗ w) -+> ((u, v) ⊗ w)
negateTensor = (Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (u, v) w)
     (Tensor (Scalar v) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
 -> LinearFunction
      (Scalar v)
      (Tensor (Scalar v) (u, v) w)
      (Tensor (Scalar v) (u, v) w))
-> (Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (u, v) w)
     (Tensor (Scalar v) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (v,w))
          -> TensorProduct (u, v) w -> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensorLinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u w)
-> Tensor (Scalar u) u w -> Tensor (Scalar u) u w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u w
v, LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensorLinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v w
w)
  addTensors :: ((u, v) ⊗ w) -> ((u, v) ⊗ w) -> (u, v) ⊗ w
addTensors (Tensor (fu, fv)) (Tensor (fu', fv')) = (Tensor (Scalar v) u w
fu Tensor (Scalar v) u w
-> Tensor (Scalar v) u w -> Tensor (Scalar v) u w
forall v. AdditiveGroup v => v -> v -> v
^+^ Tensor (Scalar v) u w
fu') Tensor (Scalar u) u w -> (v ⊗ w) -> (u, v) ⊗ w
forall u w v. (u ⊗ w) -> (v ⊗ w) -> (u, v) ⊗ w
<⊕ (v ⊗ w
fv (v ⊗ w) -> (v ⊗ w) -> v ⊗ w
forall v. AdditiveGroup v => v -> v -> v
^+^ v ⊗ w
fv')
  subtractTensors :: ((u, v) ⊗ w) -> ((u, v) ⊗ w) -> (u, v) ⊗ w
subtractTensors (Tensor (fu, fv)) (Tensor (fu', fv'))
          = (Tensor (Scalar v) u w
fu Tensor (Scalar v) u w
-> Tensor (Scalar v) u w -> Tensor (Scalar v) u w
forall v. AdditiveGroup v => v -> v -> v
^-^ Tensor (Scalar v) u w
fu') Tensor (Scalar u) u w -> (v ⊗ w) -> (u, v) ⊗ w
forall u w v. (u ⊗ w) -> (v ⊗ w) -> (u, v) ⊗ w
<⊕ (v ⊗ w
fv (v ⊗ w) -> (v ⊗ w) -> v ⊗ w
forall v. AdditiveGroup v => v -> v -> v
^-^ v ⊗ w
fv')
  toFlatTensor :: (u, v) -+> ((u, v) ⊗ Scalar (u, v))
toFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> ((Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
 -> Tensor (Scalar v) (u, v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
     (Tensor (Scalar v) (u, v) (Scalar v))
forall (k :: * -> * -> *) a b (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible a b, Object k a, Object k b) =>
p a b -> k a b
follow (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
-> Tensor (Scalar v) (u, v) (Scalar v)
forall s v w. TensorProduct v w -> Tensor s v w
Tensor LinearFunction
  (Scalar v)
  (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
  (Tensor (Scalar v) (u, v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (u, v)
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
-> LinearFunction
     (Scalar v) (u, v) (Tensor (Scalar v) (u, v) (Scalar v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction (Scalar v) u (Tensor (Scalar v) u (Scalar v))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor LinearFunction (Scalar v) u (Tensor (Scalar v) u (Scalar v))
-> LinearFunction (Scalar v) v (Tensor (Scalar v) v (Scalar v))
-> LinearFunction
     (Scalar v)
     (u, v)
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** LinearFunction (Scalar v) v (Tensor (Scalar v) v (Scalar v))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
  fromFlatTensor :: ((u, v) ⊗ Scalar (u, v)) -+> (u, v)
fromFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> ((Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
 -> Tensor (Scalar v) (u, v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (u, v) (Scalar v))
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
forall (k :: * -> * -> *) b a (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible b a, Object k a, Object k b) =>
p a b -> k b a
flout (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
-> Tensor (Scalar v) (u, v) (Scalar v)
forall s v w. TensorProduct v w -> Tensor s v w
Tensor LinearFunction
  (Scalar v)
  (Tensor (Scalar v) (u, v) (Scalar v))
  (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
     (u, v)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) (u, v) (Scalar v)) (u, v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar v) (Tensor (Scalar v) u (Scalar v)) u
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor LinearFunction (Scalar v) (Tensor (Scalar v) u (Scalar v)) u
-> LinearFunction (Scalar v) (Tensor (Scalar v) v (Scalar v)) v
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) u (Scalar v), Tensor (Scalar v) v (Scalar v))
     (u, v)
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** LinearFunction (Scalar v) (Tensor (Scalar v) v (Scalar v)) v
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
  tensorProduct :: Bilinear (u, v) w ((u, v) ⊗ w)
tensorProduct = ((u, v) -> w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar u)
     (u, v)
     (LinearFunction (Scalar u) w (Tensor (Scalar v) (u, v) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((u, v) -> w -> Tensor (Scalar v) (u, v) w)
 -> LinearFunction
      (Scalar u)
      (u, v)
      (LinearFunction (Scalar u) w (Tensor (Scalar v) (u, v) w)))
-> ((u, v) -> w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar u)
     (u, v)
     (LinearFunction (Scalar u) w (Tensor (Scalar v) (u, v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(u
u,v
v) w
w ->
                    TensorProduct (u, v) w -> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((LinearFunction
  (Scalar v) u (LinearFunction (Scalar v) w (Tensor (Scalar u) u w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar v) u (LinearFunction (Scalar v) w (Tensor (Scalar u) u w))
-> u -> LinearFunction (Scalar v) w (Tensor (Scalar u) u w)
forall s v w. LinearFunction s v w -> v -> w
-+$>u
u)LinearFunction (Scalar v) w (Tensor (Scalar u) u w)
-> w -> Tensor (Scalar u) u w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w, (LinearFunction
  (Scalar v) v (LinearFunction (Scalar v) w (Tensor (Scalar v) v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar v) v (LinearFunction (Scalar v) w (Tensor (Scalar v) v w))
-> v -> LinearFunction (Scalar v) w (Tensor (Scalar v) v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>v
v)LinearFunction (Scalar v) w (Tensor (Scalar v) v w)
-> w -> Tensor (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w)
  transposeTensor :: ((u, v) ⊗ w) -+> (w ⊗ (u, v))
transposeTensor = (Tensor (Scalar v) (u, v) w -> w ⊗ (u, v))
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) (u, v) w) (w ⊗ (u, v))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar v) (u, v) w -> w ⊗ (u, v))
 -> LinearFunction
      (Scalar v) (Tensor (Scalar v) (u, v) w) (w ⊗ (u, v)))
-> (Tensor (Scalar v) (u, v) w -> w ⊗ (u, v))
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) (u, v) w) (w ⊗ (u, v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (uw,vw))
              -> (LinearFunction
  (Scalar v)
  (LinearFunction (Scalar u) (u, v) (u, v))
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar w) w u, Tensor (Scalar w) w v)
     (w ⊗ (u, v)))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar v)
  (LinearFunction (Scalar u) (u, v) (u, v))
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar w) w u, Tensor (Scalar w) w v)
     (w ⊗ (u, v)))
-> LinearFunction (Scalar u) (u, v) (u, v)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar w) w u, Tensor (Scalar w) w v)
     (w ⊗ (u, v))
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction (Scalar u) (u, v) (u, v)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id)LinearFunction
  (Scalar v)
  (Tensor (Scalar w) w u, Tensor (Scalar w) w v)
  (w ⊗ (u, v))
-> (Tensor (Scalar w) w u, Tensor (Scalar w) w v) -> w ⊗ (u, v)
forall s v w. LinearFunction s v w -> v -> w
-+$>(LinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar w) w u)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar w) w u)
-> Tensor (Scalar u) u w -> Tensor (Scalar w) w u
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u w
uw,LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar w) w v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar w) w v)
-> Tensor (Scalar v) v w -> Tensor (Scalar w) w v
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v w
vw)
  fmapTensor :: Bilinear (w -+> x) ((u, v) ⊗ w) ((u, v) ⊗ x)
fmapTensor = ((w -+> x)
 -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar v) (u, v) w)
        (Tensor (Scalar v) (u, v) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w -+> x)
  -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) x)
 -> LinearFunction
      (Scalar x)
      (w -+> x)
      (LinearFunction
         (Scalar x)
         (Tensor (Scalar v) (u, v) w)
         (Tensor (Scalar v) (u, v) x)))
-> ((w -+> x)
    -> Tensor (Scalar v) (u, v) w -> Tensor (Scalar v) (u, v) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar v) (u, v) w)
        (Tensor (Scalar v) (u, v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
     \w -+> x
f (Tensor (uw,vw)) -> TensorProduct (u, v) x -> Tensor (Scalar v) (u, v) x
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((LinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u x))
-> (w -+> x)
-> LinearFunction
     (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)LinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar u) u x)
-> Tensor (Scalar u) u w -> Tensor (Scalar u) u x
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u w
uw, (LinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x))
-> (w -+> x)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) v x
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v w
vw)
  fzipTensorWith :: Bilinear ((w, x) -+> u) ((u, v) ⊗ w, (u, v) ⊗ x) ((u, v) ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
 -> Tensor (Scalar v) (u, v) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
        (Tensor (Scalar v) (u, v) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction
               ((((w, x) -+> u)
  -> (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
  -> Tensor (Scalar v) (u, v) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
         (Tensor (Scalar v) (u, v) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
    -> Tensor (Scalar v) (u, v) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar v) (u, v) w, Tensor (Scalar v) (u, v) x)
        (Tensor (Scalar v) (u, v) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(w, x) -+> u
f (Tensor (uw, vw), Tensor (ux, vx))
                      -> TensorProduct (u, v) u -> Tensor (Scalar v) (u, v) u
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( (LinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar u) u w, Tensor (Scalar u) u x)
     (Tensor (Scalar u) u u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar u) u w, Tensor (Scalar u) u x)
     (Tensor (Scalar u) u u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar u) u w, Tensor (Scalar u) u x)
     (Tensor (Scalar u) u u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)LinearFunction
  (Scalar v)
  (Tensor (Scalar u) u w, Tensor (Scalar u) u x)
  (Tensor (Scalar u) u u)
-> (Tensor (Scalar u) u w, Tensor (Scalar u) u x)
-> Tensor (Scalar u) u u
forall s v w. LinearFunction s v w -> v -> w
-+$>(Tensor (Scalar u) u w
uw,Tensor (Scalar u) u x
ux)
                                , (LinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)LinearFunction
  (Scalar v)
  (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
  (Tensor (Scalar v) v u)
-> (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
-> Tensor (Scalar v) v u
forall s v w. LinearFunction s v w -> v -> w
-+$>(Tensor (Scalar v) v w
vw,Tensor (Scalar v) v x
vx) )
  coerceFmapTensorProduct :: p (u, v)
-> Coercion a b
-> Coercion (TensorProduct (u, v) a) (TensorProduct (u, v) b)
coerceFmapTensorProduct p (u, v)
p Coercion a b
cab = case
             ( p u
-> Coercion a b -> Coercion (TensorProduct u a) (TensorProduct u b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((u, v) -> u
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) x
fst((u, v) -> u) -> p (u, v) -> p u
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p (u, v)
p) Coercion a b
cab
             , p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((u, v) -> v
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) y
snd((u, v) -> v) -> p (u, v) -> p v
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p (u, v)
p) Coercion a b
cab ) of
          (Coercion (TensorProduct u a) (TensorProduct u b)
Coercion, Coercion (TensorProduct v a) (TensorProduct v b)
Coercion) -> Coercion (TensorProduct (u, v) a) (TensorProduct (u, v) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  wellDefinedVector :: (u, v) -> Maybe (u, v)
wellDefinedVector (u
u,v
v) = (u -> v -> (u, v)) -> Maybe u -> Maybe v -> Maybe (u, v)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 (,) (u -> Maybe u
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector u
u) (v -> Maybe v
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector v
v)
  wellDefinedTensor :: ((u, v) ⊗ w) -> Maybe ((u, v) ⊗ w)
wellDefinedTensor (Tensor (u,v))
         = (Tensor (Scalar v) u w
 -> Tensor (Scalar v) v w -> Tensor (Scalar v) (u, v) w)
-> Maybe (Tensor (Scalar v) u w)
-> Maybe (Tensor (Scalar v) v w)
-> Maybe (Tensor (Scalar v) (u, v) w)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 (((Tensor (Scalar v) u w, Tensor (Scalar v) v w)
-> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor((Tensor (Scalar v) u w, Tensor (Scalar v) v w)
 -> Tensor (Scalar v) (u, v) w)
-> (Tensor (Scalar v) v w
    -> (Tensor (Scalar v) u w, Tensor (Scalar v) v w))
-> Tensor (Scalar v) v w
-> Tensor (Scalar v) (u, v) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.) ((Tensor (Scalar v) v w
  -> (Tensor (Scalar v) u w, Tensor (Scalar v) v w))
 -> Tensor (Scalar v) v w -> Tensor (Scalar v) (u, v) w)
-> (Tensor (Scalar v) u w
    -> Tensor (Scalar v) v w
    -> (Tensor (Scalar v) u w, Tensor (Scalar v) v w))
-> Tensor (Scalar v) u w
-> Tensor (Scalar v) v w
-> Tensor (Scalar v) (u, v) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (,)) ((u ⊗ w) -> Maybe (u ⊗ w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor u ⊗ w
Tensor (Scalar v) u w
u) (Tensor (Scalar v) v w -> Maybe (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor Tensor (Scalar v) v w
v)
instance  u v . ( LinearSpace u, LinearSpace v, Scalar u ~ Scalar v )
                       => LinearSpace (u,v) where
  type DualVector (u,v) = (DualVector u, DualVector v)
  
  dualSpaceWitness :: DualSpaceWitness (u, v)
dualSpaceWitness = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> DualSpaceWitness (u, v)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  linearId :: (u, v) +> (u, v)
linearId = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                  , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                  , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
             -> (LinearFunction (Scalar v) u (u, v)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) u u)
     (LinearMap (Scalar v) u (u, v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction (Scalar v) u u
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
idLinearFunction (Scalar v) u u
-> LinearFunction (Scalar v) u v
-> LinearFunction (Scalar v) u (u, v)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction (Scalar v) u v
forall w s v. AdditiveGroup w => LinearFunction s v w
const0)LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) u u)
  (LinearMap (Scalar v) u (u, v))
-> LinearMap (Scalar v) u u -> LinearMap (Scalar v) u (u, v)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar v) u u
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id) LinearMap (Scalar u) u (u, v) -> (v +> (u, v)) -> (u, v) +> (u, v)
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
 (LinearFunction (Scalar v) v (u, v)
-> LinearFunction
     (Scalar v) (LinearMap (Scalar v) v v) (v +> (u, v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction (Scalar v) v u
forall w s v. AdditiveGroup w => LinearFunction s v w
const0LinearFunction (Scalar v) v u
-> LinearFunction (Scalar v) v v
-> LinearFunction (Scalar v) v (u, v)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&LinearFunction (Scalar v) v v
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id)LinearFunction (Scalar v) (LinearMap (Scalar v) v v) (v +> (u, v))
-> LinearMap (Scalar v) v v -> v +> (u, v)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar v) v v
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id)
  tensorId :: ((u, v) ⊗ w) +> ((u, v) ⊗ w)
tensorId = ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness v
-> DualSpaceWitness w
-> ((u, v) ⊗ w) +> ((u, v) ⊗ w)
forall w.
(LinearSpace w, Scalar w ~ Scalar v) =>
ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness v
-> DualSpaceWitness w
-> ((u, v) ⊗ w) +> ((u, v) ⊗ w)
tI ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness DualSpaceWitness w
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where tI ::  w . (LinearSpace w, Scalar w ~ Scalar v)
                 => ScalarSpaceWitness u -> DualSpaceWitness u
                     -> DualSpaceWitness v -> DualSpaceWitness w
                       -> ((u,v)w)+>((u,v)w)
         tI :: ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness v
-> DualSpaceWitness w
-> ((u, v) ⊗ w) +> ((u, v) ⊗ w)
tI ScalarSpaceWitness u
ScalarSpaceWitness DualSpaceWitness u
DualSpaceWitness DualSpaceWitness v
DualSpaceWitness DualSpaceWitness w
DualSpaceWitness 
              = TensorProduct
  (DualVector (Tensor (Scalar v) (u, v) w))
  (Tensor (Scalar v) (u, v) w)
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (u, v) w)
     (Tensor (Scalar v) (u, v) w)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap
            ( Coercion
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector u) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector u)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor Coercion
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector u) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector u)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (Tensor (Scalar v) (DualVector u) (DualVector w))
        (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (DualVector u)
        (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector u) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector u) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector u) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector u) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar v) (u, v) w))
     (LinearMap
        (Scalar v)
        (LinearMap (Scalar v) (DualVector u) w)
        (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (Tensor (Scalar v) (DualVector u) (DualVector w))
        (Tensor (Scalar v) (u, v) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar v) (u, v) w))
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector u) w)
     (Tensor (Scalar v) (u, v) w))
forall s v w x.
(LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s) =>
Coercion
  (LinearMap s (Tensor s (DualVector v) w) x)
  (LinearMap s (LinearMap s v w) x)
argFromTensor
                 Coercion
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector u)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar v) (u, v) w)
-> Tensor
     (Scalar v)
     (DualVector u)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar u) u w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector u)) w)
        (Tensor (Scalar v) (u, v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Tensor (Scalar u) u w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar v) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar u) u w -> Tensor (Scalar v) (u, v) w)
 -> LinearFunction
      (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar v) (u, v) w))
-> (Tensor (Scalar u) u w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v) (Tensor (Scalar u) u w) (Tensor (Scalar v) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Tensor (Scalar u) u w
t -> TensorProduct (u, v) w -> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar u) u w
t,Tensor (Scalar v) v w
forall v. AdditiveGroup v => v
zeroV)) LinearFunction
  (Scalar v)
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar u) u w))
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar v) (u, v) w))
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar u) u w)
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector u)) w)
     (Tensor (Scalar v) (u, v) w)
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearMap
  (Scalar v)
  (Tensor (Scalar v) (DualVector (DualVector u)) w)
  (Tensor (Scalar u) u w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
            , Coercion
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector v)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor Coercion
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector v)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (Tensor (Scalar v) (DualVector v) (DualVector w))
        (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (DualVector v)
        (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector v) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector v) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (Tensor (Scalar v) (DualVector v) (DualVector w))
     (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) (u, v) w))
     (LinearMap
        (Scalar v)
        (LinearMap (Scalar v) (DualVector v) w)
        (Tensor (Scalar v) (u, v) w))
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) (u, v) w))
     (Tensor
        (Scalar v)
        (Tensor (Scalar v) (DualVector v) (DualVector w))
        (Tensor (Scalar v) (u, v) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) (u, v) w))
  (LinearMap
     (Scalar v)
     (LinearMap (Scalar v) (DualVector v) w)
     (Tensor (Scalar v) (u, v) w))
forall s v w x.
(LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s) =>
Coercion
  (LinearMap s (Tensor s (DualVector v) w) x)
  (LinearMap s (LinearMap s v w) x)
argFromTensor
                 Coercion
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) (u, v) w))
  (Tensor
     (Scalar v)
     (DualVector v)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w)))
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) (u, v) w)
-> Tensor
     (Scalar v)
     (DualVector v)
     (Tensor (Scalar v) (DualVector w) (Tensor (Scalar v) (u, v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) v w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (DualVector (DualVector v)) w)
        (Tensor (Scalar v) (u, v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Tensor (Scalar v) v w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar v) v w -> Tensor (Scalar v) (u, v) w)
 -> LinearFunction
      (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) (u, v) w))
-> (Tensor (Scalar v) v w -> Tensor (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Tensor (Scalar v) v w
t -> TensorProduct (u, v) w -> Tensor (Scalar v) (u, v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar v) u w
forall v. AdditiveGroup v => v
zeroV,Tensor (Scalar v) v w
t)) LinearFunction
  (Scalar v)
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) v w))
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) (u, v) w))
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) v w)
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (DualVector (DualVector v)) w)
     (Tensor (Scalar v) (u, v) w)
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearMap
  (Scalar v)
  (Tensor (Scalar v) (DualVector (DualVector v)) w)
  (Tensor (Scalar v) v w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId )
  sampleLinearFunction :: ((u, v) -+> w) -+> ((u, v) +> w)
sampleLinearFunction = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                              , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                              , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
              -> (LinearFunction (Scalar v) (u, v) w
 -> LinearMap (Scalar u) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearFunction (Scalar v) (u, v) w)
     (LinearMap (Scalar u) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction (Scalar v) (u, v) w
  -> LinearMap (Scalar u) (u, v) w)
 -> LinearFunction
      (Scalar v)
      (LinearFunction (Scalar v) (u, v) w)
      (LinearMap (Scalar u) (u, v) w))
-> (LinearFunction (Scalar v) (u, v) w
    -> LinearMap (Scalar u) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearFunction (Scalar v) (u, v) w)
     (LinearMap (Scalar u) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction (Scalar v) (u, v) w
f -> (LinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) u w)
  (LinearMap (Scalar u) u w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar v)
  (LinearFunction (Scalar v) u w)
  (LinearMap (Scalar u) u w)
-> LinearFunction (Scalar v) u w -> LinearMap (Scalar u) u w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction (Scalar v) (u, v) w
f LinearFunction (Scalar v) (u, v) w
-> LinearFunction (Scalar v) u (u, v)
-> LinearFunction (Scalar v) u w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar v) u (u, v)
forall w s v. AdditiveGroup w => LinearFunction s v (v, w)
lCoFst)
                                              LinearMap (Scalar u) u w -> (v +> w) -> (u, v) +> w
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
 (LinearFunction (Scalar v) (LinearFunction (Scalar v) v w) (v +> w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction (Scalar v) (LinearFunction (Scalar v) v w) (v +> w)
-> LinearFunction (Scalar v) v w -> v +> w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction (Scalar v) (u, v) w
f LinearFunction (Scalar v) (u, v) w
-> LinearFunction (Scalar v) v (u, v)
-> LinearFunction (Scalar v) v w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar v) v (u, v)
forall v s w. AdditiveGroup v => LinearFunction s w (v, w)
lCoSnd)
  applyDualVector :: Bilinear (DualVector (u, v)) (u, v) (Scalar (u, v))
applyDualVector = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                         , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                         , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
              -> ((DualVector u, DualVector v)
 -> LinearFunction (Scalar v) (u, v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (DualVector u, DualVector v)
     (LinearFunction (Scalar v) (u, v) (Scalar v))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((DualVector u, DualVector v)
  -> LinearFunction (Scalar v) (u, v) (Scalar v))
 -> LinearFunction
      (Scalar v)
      (DualVector u, DualVector v)
      (LinearFunction (Scalar v) (u, v) (Scalar v)))
-> ((DualVector u, DualVector v)
    -> LinearFunction (Scalar v) (u, v) (Scalar v))
-> LinearFunction
     (Scalar v)
     (DualVector u, DualVector v)
     (LinearFunction (Scalar v) (u, v) (Scalar v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(DualVector u
du,DualVector v
dv)
                      -> (LinearFunction
  (Scalar (DualVector u))
  (DualVector u)
  (LinearFunction (Scalar v) u (Scalar v))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (DualVector u))
  (DualVector u)
  (LinearFunction (Scalar v) u (Scalar v))
-> DualVector u -> LinearFunction (Scalar v) u (Scalar v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$DualVector u
du) LinearFunction (Scalar v) u (Scalar v)
-> LinearFunction (Scalar v) v (Scalar v)
-> LinearFunction (Scalar v) (u, v) (Scalar v, Scalar v)
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** (LinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (LinearFunction (Scalar v) v (Scalar v))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (LinearFunction (Scalar v) v (Scalar v))
-> DualVector v -> LinearFunction (Scalar v) v (Scalar v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$DualVector v
dv) LinearFunction (Scalar v) (u, v) (Scalar v, Scalar v)
-> LinearFunction (Scalar v) (Scalar v, Scalar v) (Scalar v)
-> LinearFunction (Scalar v) (u, v) (Scalar v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar v) (Scalar v, Scalar v) (Scalar v)
forall w s. AdditiveGroup w => LinearFunction s (w, w) w
addV
  applyLinear :: Bilinear ((u, v) +> w) (u, v) w
applyLinear = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                     , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                     , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
              -> (LinearMap (Scalar v) (u, v) w
 -> LinearFunction (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (u, v) w)
     (LinearFunction (Scalar v) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearMap (Scalar v) (u, v) w
  -> LinearFunction (Scalar v) (u, v) w)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (u, v) w)
      (LinearFunction (Scalar v) (u, v) w))
-> (LinearMap (Scalar v) (u, v) w
    -> LinearFunction (Scalar v) (u, v) w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (u, v) w)
     (LinearFunction (Scalar v) (u, v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap (fu, fv)) ->
           (LinearFunction
  (Scalar v)
  (LinearMap (Scalar u) u w)
  (LinearFunction (Scalar v) u w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearFunction
  (Scalar v)
  (LinearMap (Scalar u) u w)
  (LinearFunction (Scalar v) u w)
-> LinearMap (Scalar u) u w -> LinearFunction (Scalar v) u w
forall s v w. LinearFunction s v w -> v -> w
-+$> (Coercion
  (Tensor (Scalar v) (DualVector u) w) (LinearMap (Scalar u) u w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector u) w) (LinearMap (Scalar u) u w)
-> Tensor (Scalar v) (DualVector u) w -> LinearMap (Scalar u) u w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector u) w
fu)) LinearFunction (Scalar v) u w
-> LinearFunction (Scalar v) v w
-> LinearFunction (Scalar v) (u, v) (w, w)
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v w)
  (LinearFunction (Scalar v) v w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v w)
  (LinearFunction (Scalar v) v w)
-> LinearMap (Scalar v) v w -> LinearFunction (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$> (Coercion
  (Tensor (Scalar v) (DualVector v) w) (LinearMap (Scalar v) v w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector v) w) (LinearMap (Scalar v) v w)
-> Tensor (Scalar v) (DualVector v) w -> LinearMap (Scalar v) v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector v) w
fv))
             LinearFunction (Scalar v) (u, v) (w, w)
-> LinearFunction (Scalar v) (w, w) w
-> LinearFunction (Scalar v) (u, v) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar v) (w, w) w
forall w s. AdditiveGroup w => LinearFunction s (w, w) w
addV
  composeLinear :: Bilinear (w +> x) ((u, v) +> w) ((u, v) +> x)
composeLinear = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                       , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
       (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
              -> ((w +> x)
 -> LinearMap (Scalar v) (u, v) w -> LinearMap (Scalar u) (u, v) x)
-> LinearFunction
     (Scalar v)
     (w +> x)
     (LinearFunction
        (Scalar v)
        (LinearMap (Scalar v) (u, v) w)
        (LinearMap (Scalar u) (u, v) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w +> x)
  -> LinearMap (Scalar v) (u, v) w -> LinearMap (Scalar u) (u, v) x)
 -> LinearFunction
      (Scalar v)
      (w +> x)
      (LinearFunction
         (Scalar v)
         (LinearMap (Scalar v) (u, v) w)
         (LinearMap (Scalar u) (u, v) x)))
-> ((w +> x)
    -> LinearMap (Scalar v) (u, v) w -> LinearMap (Scalar u) (u, v) x)
-> LinearFunction
     (Scalar v)
     (w +> x)
     (LinearFunction
        (Scalar v)
        (LinearMap (Scalar v) (u, v) w)
        (LinearMap (Scalar u) (u, v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w +> x
f (LinearMap (fu, fv))
                    -> ((LinearFunction
  (Scalar v)
  (w +> x)
  (LinearFunction
     (Scalar v) (LinearMap (Scalar u) u w) (LinearMap (Scalar u) u x))
forall v w x.
(LinearSpace v, LinearSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w +> x) (v +> w) (v +> x)
composeLinearLinearFunction
  (Scalar v)
  (w +> x)
  (LinearFunction
     (Scalar v) (LinearMap (Scalar u) u w) (LinearMap (Scalar u) u x))
-> (w +> x)
-> LinearFunction
     (Scalar v) (LinearMap (Scalar u) u w) (LinearMap (Scalar u) u x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f)LinearFunction
  (Scalar v) (LinearMap (Scalar u) u w) (LinearMap (Scalar u) u x)
-> LinearMap (Scalar u) u w -> LinearMap (Scalar u) u x
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (Tensor (Scalar v) (DualVector u) w) (LinearMap (Scalar u) u w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector u) w) (LinearMap (Scalar u) u w)
-> Tensor (Scalar v) (DualVector u) w -> LinearMap (Scalar u) u w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector u) w
fu)
                       LinearMap (Scalar u) u x -> (v +> x) -> (u, v) +> x
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
 ((LinearFunction
  (Scalar v)
  (w +> x)
  (LinearFunction (Scalar v) (LinearMap (Scalar v) v w) (v +> x))
forall v w x.
(LinearSpace v, LinearSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w +> x) (v +> w) (v +> x)
composeLinearLinearFunction
  (Scalar v)
  (w +> x)
  (LinearFunction (Scalar v) (LinearMap (Scalar v) v w) (v +> x))
-> (w +> x)
-> LinearFunction (Scalar v) (LinearMap (Scalar v) v w) (v +> x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f)LinearFunction (Scalar v) (LinearMap (Scalar v) v w) (v +> x)
-> LinearMap (Scalar v) v w -> v +> x
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (Tensor (Scalar v) (DualVector v) w) (LinearMap (Scalar v) v w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector v) w) (LinearMap (Scalar v) v w)
-> Tensor (Scalar v) (DualVector v) w -> LinearMap (Scalar v) v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector v) w
fv)
  applyTensorFunctional :: Bilinear (DualVector ((u, v) ⊗ u)) ((u, v) ⊗ u) (Scalar (u, v))
applyTensorFunctional = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                               , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
     (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> (LinearMap (Scalar v) (u, v) (DualVector u)
 -> Tensor (Scalar v) (u, v) u -> Scalar v)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (u, v) (DualVector u))
     (LinearFunction (Scalar v) (Tensor (Scalar v) (u, v) u) (Scalar v))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar v) (u, v) (DualVector u)
  -> Tensor (Scalar v) (u, v) u -> Scalar v)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (u, v) (DualVector u))
      (LinearFunction
         (Scalar v) (Tensor (Scalar v) (u, v) u) (Scalar v)))
-> (LinearMap (Scalar v) (u, v) (DualVector u)
    -> Tensor (Scalar v) (u, v) u -> Scalar v)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (u, v) (DualVector u))
     (LinearFunction (Scalar v) (Tensor (Scalar v) (u, v) u) (Scalar v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                  \(LinearMap (fu,fv)) (Tensor (tu,tv))
                           -> ((LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar u) u u) (Scalar v))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar u) u u) (Scalar v))
-> LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u)
-> LinearFunction (Scalar v) (Tensor (Scalar u) u u) (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (Tensor (Scalar v) (DualVector u) (DualVector u))
  (LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMapCoercion
  (Tensor (Scalar v) (DualVector u) (DualVector u))
  (LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u))
-> Tensor (Scalar v) (DualVector u) (DualVector u)
-> LinearMap (Scalar v) (DualVector (DualVector u)) (DualVector u)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor (Scalar v) (DualVector u) (DualVector u)
fu)LinearFunction (Scalar v) (Tensor (Scalar u) u u) (Scalar v)
-> Tensor (Scalar u) u u -> Scalar v
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u u
tu)
                            Scalar v -> Scalar v -> Scalar v
forall a. Num a => a -> a -> a
+ ((LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v))
-> LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u)
-> LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (Tensor (Scalar v) (DualVector v) (DualVector u))
  (LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMapCoercion
  (Tensor (Scalar v) (DualVector v) (DualVector u))
  (LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u))
-> Tensor (Scalar v) (DualVector v) (DualVector u)
-> LinearMap (Scalar v) (DualVector (DualVector v)) (DualVector u)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor (Scalar v) (DualVector v) (DualVector u)
fv)LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v)
-> Tensor (Scalar v) v u -> Scalar v
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v u
tv)
  applyTensorLinMap :: Bilinear (((u, v) ⊗ u) +> w) ((u, v) ⊗ u) w
applyTensorLinMap = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                           , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
     (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
 -> Tensor (Scalar v) (u, v) u -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w)
     (LinearFunction (Scalar v) (Tensor (Scalar v) (u, v) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction((LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
  -> Tensor (Scalar v) (u, v) u -> w)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w)
      (LinearFunction (Scalar v) (Tensor (Scalar v) (u, v) u) w))
-> (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
    -> Tensor (Scalar v) (u, v) u -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w)
     (LinearFunction (Scalar v) (Tensor (Scalar v) (u, v) u) w)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`
             \LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
f (Tensor (tu,tv)) -> let LinearMap (fu,fv) = Coercion
  (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w)
  (LinearMap (Scalar v) (u, v) (LinearMap (Scalar v) u w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w)
  (LinearMap (Scalar v) (u, v) (LinearMap (Scalar v) u w))
-> LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
-> LinearMap (Scalar v) (u, v) (LinearMap (Scalar v) u w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar v) (Tensor (Scalar v) (u, v) u) w
f
                   in ( (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar u) u u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar u) u u) w)
-> LinearMap (Scalar v) (Tensor (Scalar v) u u) w
-> LinearFunction (Scalar v) (Tensor (Scalar u) u u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap (Scalar v) u (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMapCoercion
  (LinearMap (Scalar v) u (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
-> Coercion
     (Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w))
     (LinearMap (Scalar v) u (LinearMap (Scalar v) u w))
-> Coercion
     (Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w))
     (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.Coercion
  (Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) u (LinearMap (Scalar v) u w))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) u u) w)
-> Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w)
-> LinearMap (Scalar v) (Tensor (Scalar v) u u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector u) (LinearMap (Scalar v) u w)
fu)LinearFunction (Scalar v) (Tensor (Scalar u) u u) w
-> Tensor (Scalar u) u u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar u) u u
tu )
                   w -> w -> w
forall v. AdditiveGroup v => v -> v -> v
^+^ ( (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) w)
-> LinearMap (Scalar v) (Tensor (Scalar v) v u) w
-> LinearFunction (Scalar v) (Tensor (Scalar v) v u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap (Scalar v) v (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMapCoercion
  (LinearMap (Scalar v) v (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
-> Coercion
     (Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w))
     (LinearMap (Scalar v) v (LinearMap (Scalar v) u w))
-> Coercion
     (Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w))
     (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.Coercion
  (Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) v (LinearMap (Scalar v) u w))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w))
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
-> Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w)
-> LinearMap (Scalar v) (Tensor (Scalar v) v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (DualVector v) (LinearMap (Scalar v) u w)
fv)LinearFunction (Scalar v) (Tensor (Scalar v) v u) w
-> Tensor (Scalar v) v u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar v) v u
tv )
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
r = φ
(LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
r

lfstBlock :: ( LSpace u, LSpace v, LSpace w
             , Scalar u ~ Scalar v, Scalar v ~ Scalar w )
          => (u+>w) -+> ((u,v)+>w)
lfstBlock :: (u +> w) -+> ((u, v) +> w)
lfstBlock = ((u +> w) -> LinearMap (Scalar u) (u, v) w)
-> LinearFunction
     (Scalar w) (u +> w) (LinearMap (Scalar u) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((u +> w) -> (v +> w) -> (u, v) +> w
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
v +> w
forall v. AdditiveGroup v => v
zeroV)
lsndBlock :: ( LSpace u, LSpace v, LSpace w
            , Scalar u ~ Scalar v, Scalar v ~ Scalar w )
          => (v+>w) -+> ((u,v)+>w)
lsndBlock :: (v +> w) -+> ((u, v) +> w)
lsndBlock = ((v +> w) -> LinearMap (Scalar u) (u, v) w)
-> LinearFunction
     (Scalar w) (v +> w) (LinearMap (Scalar u) (u, v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (LinearMap (Scalar u) u w
forall v. AdditiveGroup v => v
zeroVLinearMap (Scalar u) u w -> (v +> w) -> (u, v) +> w
forall u w v. (u +> w) -> (v +> w) -> (u, v) +> w
)


-- | @((v'⊗w)+>x) -> ((v+>w)+>x)
argFromTensor ::  s v w x . (LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s)
                 => Coercion (LinearMap s (Tensor s (DualVector v) w) x)
                             (LinearMap s (LinearMap s v w) x)
argFromTensor :: Coercion
  (LinearMap s (Tensor s (DualVector v) w) x)
  (LinearMap s (LinearMap s v w) x)
argFromTensor = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
     DualSpaceWitness v
DualSpaceWitness -> Coercion
  (LinearMap s (Tensor s (DualVector v) w) x)
  (LinearMap s (DualVector v) (LinearMap s w x))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap s (Tensor s (DualVector v) w) x)
  (LinearMap s (DualVector v) (LinearMap s w x))
-> Coercion
     (LinearMap s (DualVector v) (LinearMap s w x))
     (LinearMap s (LinearMap s v w) x)
-> Coercion
     (LinearMap s (Tensor s (DualVector v) w) x)
     (LinearMap s (LinearMap s v w) x)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (LinearMap s (DualVector v) (LinearMap s w x))
  (Tensor s v (LinearMap s w x))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap s (DualVector v) (LinearMap s w x))
  (Tensor s v (LinearMap s w x))
-> Coercion
     (Tensor s v (LinearMap s w x)) (LinearMap s (LinearMap s v w) x)
-> Coercion
     (LinearMap s (DualVector v) (LinearMap s w x))
     (LinearMap s (LinearMap s v w) x)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s v (LinearMap s w x)) (LinearMap s (LinearMap s v w) x)
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMap

-- | @((v+>w)+>x) -> ((v'⊗w)+>x)@
argAsTensor ::  s v w x . (LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s)
                 => Coercion (LinearMap s (LinearMap s v w) x)
                             (LinearMap s (Tensor s (DualVector v) w) x)
argAsTensor :: Coercion
  (LinearMap s (LinearMap s v w) x)
  (LinearMap s (Tensor s (DualVector v) w) x)
argAsTensor = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
     DualSpaceWitness v
DualSpaceWitness -> Coercion
  (LinearMap s (DualVector v) (LinearMap s w x))
  (LinearMap s (Tensor s (DualVector v) w) x)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap s (DualVector v) (LinearMap s w x))
  (LinearMap s (Tensor s (DualVector v) w) x)
-> Coercion
     (LinearMap s (LinearMap s v w) x)
     (LinearMap s (DualVector v) (LinearMap s w x))
-> Coercion
     (LinearMap s (LinearMap s v w) x)
     (LinearMap s (Tensor s (DualVector v) w) x)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor s v (LinearMap s w x))
  (LinearMap s (DualVector v) (LinearMap s w x))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap Coercion
  (Tensor s v (LinearMap s w x))
  (LinearMap s (DualVector v) (LinearMap s w x))
-> Coercion
     (LinearMap s (LinearMap s v w) x) (Tensor s v (LinearMap s w x))
-> Coercion
     (LinearMap s (LinearMap s v w) x)
     (LinearMap s (DualVector v) (LinearMap s w x))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (LinearMap s (LinearMap s v w) x) (Tensor s v (LinearMap s w x))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap

-- | @(u+>(v⊗w)) -> (u+>v)⊗w@
deferLinearMap :: Coercion (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap :: Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap = Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

-- | @(u+>v)⊗w -> u+>(v⊗w)@
hasteLinearMap :: Coercion (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap :: Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap = Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion


lassocTensor :: Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor :: Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
rassocTensor :: Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor :: Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor = Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance  s u v . ( LinearSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s )
                       => TensorSpace (LinearMap s u v) where
  type TensorProduct (LinearMap s u v) w = TensorProduct (DualVector u) (Tensor s v w)
  scalarSpaceWitness :: ScalarSpaceWitness (LinearMap s u v)
scalarSpaceWitness = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                            , ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, ScalarSpaceWitness v
_ScalarSpaceWitness) -> ScalarSpaceWitness (LinearMap s u v)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (LinearMap s u v)
linearManifoldWitness = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                               , LinearManifoldWitness u
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness u
                               , LinearManifoldWitness v
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness v ) of
       ( ScalarSpaceWitness u
ScalarSpaceWitness
        ,LinearManifoldWitness u
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
           BoundarylessWitness
#endif
        ,LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
           BoundarylessWitness
#endif
        )
         -> LinearManifoldWitness (LinearMap s u v)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
             BoundarylessWitness
#endif
  zeroTensor :: LinearMap s u v ⊗ w
zeroTensor = Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s u (Tensor s v w)
forall v. AdditiveGroup v => v
zeroV
  toFlatTensor :: LinearMap s u v -+> (LinearMap s u v ⊗ Scalar (LinearMap s u v))
toFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
       ScalarSpaceWitness u
ScalarSpaceWitness -> Coercion
  (LinearMap s u (Tensor s v s)) (Tensor s (LinearMap s u v) s)
-> LinearFunction
     s (LinearMap s u (Tensor s v s)) (Tensor s (LinearMap s u v) s)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s u (Tensor s v s)) (Tensor s (LinearMap s u v) s)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap LinearFunction
  s (LinearMap s u (Tensor s v s)) (Tensor s (LinearMap s u v) s)
-> LinearFunction
     s (LinearMap s u v) (LinearMap s u (Tensor s v s))
-> LinearFunction
     s (LinearMap s u v) (Tensor s (LinearMap s u v) s)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s v (Tensor s v s)
-> LinearFunction
     s (LinearMap s u v) (LinearMap s u (Tensor s v s))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s v (Tensor s v s)
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
  fromFlatTensor :: (LinearMap s u v ⊗ Scalar (LinearMap s u v)) -+> LinearMap s u v
fromFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
       ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction s (Tensor s v s) v
-> LinearFunction
     s (LinearMap s u (Tensor s v s)) (LinearMap s u v)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s (Tensor s v s) v
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor LinearFunction s (LinearMap s u (Tensor s v s)) (LinearMap s u v)
-> LinearFunction
     s (Tensor s (LinearMap s u v) s) (LinearMap s u (Tensor s v s))
-> LinearFunction
     s (Tensor s (LinearMap s u v) s) (LinearMap s u v)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) s) (LinearMap s u (Tensor s v s))
-> LinearFunction
     s (Tensor s (LinearMap s u v) s) (LinearMap s u (Tensor s v s))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) s) (LinearMap s u (Tensor s v s))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
  addTensors :: (LinearMap s u v ⊗ w)
-> (LinearMap s u v ⊗ w) -> LinearMap s u v ⊗ w
addTensors LinearMap s u v ⊗ w
t₁ LinearMap s u v ⊗ w
t₂ = Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMapCoercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearMap s u v) w
LinearMap s u v ⊗ w
t₁) LinearMap s u (Tensor s v w)
-> LinearMap s u (Tensor s v w) -> LinearMap s u (Tensor s v w)
forall v. AdditiveGroup v => v -> v -> v
^+^ (Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMapCoercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearMap s u v) w
LinearMap s u v ⊗ w
t₂)
  subtractTensors :: (LinearMap s u v ⊗ w)
-> (LinearMap s u v ⊗ w) -> LinearMap s u v ⊗ w
subtractTensors LinearMap s u v ⊗ w
t₁ LinearMap s u v ⊗ w
t₂ = Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMapCoercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearMap s u v) w
LinearMap s u v ⊗ w
t₁) LinearMap s u (Tensor s v w)
-> LinearMap s u (Tensor s v w) -> LinearMap s u (Tensor s v w)
forall v. AdditiveGroup v => v -> v -> v
^-^ (Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMapCoercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearMap s u v) w
LinearMap s u v ⊗ w
t₂)
  scaleTensor :: Bilinear
  (Scalar (LinearMap s u v))
  (LinearMap s u v ⊗ w)
  (LinearMap s u v ⊗ w)
scaleTensor = (s -> Tensor s (LinearMap s u v) w -> Tensor s (LinearMap s u v) w)
-> Bilinear
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((s
  -> Tensor s (LinearMap s u v) w -> Tensor s (LinearMap s u v) w)
 -> Bilinear
      s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w))
-> (s
    -> Tensor s (LinearMap s u v) w -> Tensor s (LinearMap s u v) w)
-> Bilinear
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \s
μ Tensor s (LinearMap s u v) w
t
            -> Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ s
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
forall v s.
(VectorSpace v, Scalar v ~ s) =>
s -> LinearFunction s v v
scaleWith s
μ LinearFunction
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
-> LinearMap s u (Tensor s v w) -> LinearMap s u (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (LinearMap s u v) w
t
  negateTensor :: (LinearMap s u v ⊗ w) -+> (LinearMap s u v ⊗ w)
negateTensor = Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap LinearFunction
  s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
forall w s. AdditiveGroup w => LinearFunction s w w
lNegateV LinearFunction
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
  transposeTensor :: (LinearMap s u v ⊗ w) -+> (w ⊗ LinearMap s u v)
transposeTensor = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                         , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u ) of
    (ScalarSpaceWitness u
ScalarSpaceWitness,DualSpaceWitness u
DualSpaceWitness)-> --(u +> v) ⊗ w
              Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap     --  u +> (v ⊗ w)
          LinearFunction
  s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (Tensor s w (LinearMap s u v))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar w) (Tensor s v w) (Tensor s w v)
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s w v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction (Scalar w) (Tensor s v w) (Tensor s w v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor   --  u +> (w ⊗ v)
          LinearFunction
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s w v))
-> LinearFunction
     s (LinearMap s u (Tensor s w v)) (Tensor s w (LinearMap s u v))
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (LinearMap s u (Tensor s w v))
  (Tensor s (DualVector u) (Tensor s w v))
-> LinearFunction
     s
     (LinearMap s u (Tensor s w v))
     (Tensor s (DualVector u) (Tensor s w v))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s u (Tensor s w v))
  (Tensor s (DualVector u) (Tensor s w v))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor           --  u' ⊗ (w ⊗ v)
          LinearFunction
  s
  (LinearMap s u (Tensor s w v))
  (Tensor s (DualVector u) (Tensor s w v))
-> LinearFunction
     s
     (Tensor s (DualVector u) (Tensor s w v))
     (Tensor s w (LinearMap s u v))
-> LinearFunction
     s (LinearMap s u (Tensor s w v)) (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  s
  (Tensor s (DualVector u) (Tensor s w v))
  (Tensor s (Tensor s w v) (DualVector u))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor        --  (w ⊗ v) ⊗ u'
          LinearFunction
  s
  (Tensor s (DualVector u) (Tensor s w v))
  (Tensor s (Tensor s w v) (DualVector u))
-> LinearFunction
     s
     (Tensor s (Tensor s w v) (DualVector u))
     (Tensor s w (LinearMap s u v))
-> LinearFunction
     s
     (Tensor s (DualVector u) (Tensor s w v))
     (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s (Tensor s w v) (DualVector u))
  (Tensor s w (Tensor s v (DualVector u)))
-> LinearFunction
     s
     (Tensor s (Tensor s w v) (DualVector u))
     (Tensor s w (Tensor s v (DualVector u)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (Tensor s w v) (DualVector u))
  (Tensor s w (Tensor s v (DualVector u)))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor       --  w ⊗ (v ⊗ u')
          LinearFunction
  s
  (Tensor s (Tensor s w v) (DualVector u))
  (Tensor s w (Tensor s v (DualVector u)))
-> LinearFunction
     s
     (Tensor s w (Tensor s v (DualVector u)))
     (Tensor s w (LinearMap s u v))
-> LinearFunction
     s
     (Tensor s (Tensor s w v) (DualVector u))
     (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (DualVector u))
  (Tensor s v (DualVector u))
  (Tensor s (DualVector u) v)
-> LinearFunction
     s
     (Tensor s w (Tensor s v (DualVector u)))
     (Tensor s w (Tensor s (DualVector u) v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction
  (Scalar (DualVector u))
  (Tensor s v (DualVector u))
  (Tensor s (DualVector u) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor   --  w ⊗ (u' ⊗ v)
          LinearFunction
  s
  (Tensor s w (Tensor s v (DualVector u)))
  (Tensor s w (Tensor s (DualVector u) v))
-> LinearFunction
     s
     (Tensor s w (Tensor s (DualVector u) v))
     (Tensor s w (LinearMap s u v))
-> LinearFunction
     s
     (Tensor s w (Tensor s v (DualVector u)))
     (Tensor s w (LinearMap s u v))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s w (Tensor s (DualVector u) v))
  (Tensor s w (LinearMap s u v))
-> LinearFunction
     s
     (Tensor s w (Tensor s (DualVector u) v))
     (Tensor s w (LinearMap s u v))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
-> Coercion
     (Tensor s w (Tensor s (DualVector u) v))
     (Tensor s w (LinearMap s u v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor)  --  w ⊗ (u +> v)
  tensorProduct :: Bilinear (LinearMap s u v) w (LinearMap s u v ⊗ w)
tensorProduct = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearMap s u v -> w -> Tensor s (LinearMap s u v) w)
-> LinearFunction
     s
     (LinearMap s u v)
     (LinearFunction s w (Tensor s (LinearMap s u v) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s u v -> w -> Tensor s (LinearMap s u v) w)
 -> LinearFunction
      s
      (LinearMap s u v)
      (LinearFunction s w (Tensor s (LinearMap s u v) w)))
-> (LinearMap s u v -> w -> Tensor s (LinearMap s u v) w)
-> LinearFunction
     s
     (LinearMap s u v)
     (LinearFunction s w (Tensor s (LinearMap s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearMap s u v
f w
s
                   -> Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction (Scalar w) v (Tensor s v w)
-> LinearFunction
     s (LinearMap s u v) (LinearMap s u (Tensor s v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Bilinear v w (Tensor (Scalar v) v w)
-> Bilinear w v (Tensor (Scalar v) v w)
forall v w y. Bilinear v w y -> Bilinear w v y
flipBilin Bilinear v w (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction s w (LinearFunction (Scalar w) v (Tensor s v w))
-> w -> LinearFunction (Scalar w) v (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>w
s)LinearFunction s (LinearMap s u v) (LinearMap s u (Tensor s v w))
-> LinearMap s u v -> LinearMap s u (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap s u v
f
  fmapTensor :: Bilinear (w -+> x) (LinearMap s u v ⊗ w) (LinearMap s u v ⊗ x)
fmapTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s w x
 -> LinearFunction
      s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x))
-> LinearFunction
     s
     (LinearFunction s w x)
     (LinearFunction
        s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s w x
  -> LinearFunction
       s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x))
 -> LinearFunction
      s
      (LinearFunction s w x)
      (LinearFunction
         s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x)))
-> (LinearFunction s w x
    -> LinearFunction
         s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x))
-> LinearFunction
     s
     (LinearFunction s w x)
     (LinearFunction
        s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s w x
f
                -> Coercion
  (LinearMap s u (Tensor s v x)) (Tensor s (LinearMap s u v) x)
-> LinearFunction
     s (LinearMap s u (Tensor s v x)) (Tensor s (LinearMap s u v) x)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s u (Tensor s v x)) (Tensor s (LinearMap s u v) x)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap LinearFunction
  s (LinearMap s u (Tensor s v x)) (Tensor s (LinearMap s u v) x)
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) x)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction s (Tensor s v w) (Tensor s v x)
-> LinearFunction
     s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v x))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s w x
-> LinearFunction s (Tensor s v w) (Tensor s v x)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s w x
f) LinearFunction
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v x))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (LinearMap s u v ⊗ w, LinearMap s u v ⊗ x)
  (LinearMap s u v ⊗ u)
fzipTensorWith = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s (w, x) u
 -> LinearFunction
      s
      (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
      (Tensor s (LinearMap s u v) u))
-> LinearFunction
     s
     (LinearFunction s (w, x) u)
     (LinearFunction
        s
        (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
        (Tensor s (LinearMap s u v) u))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s (w, x) u
  -> LinearFunction
       s
       (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
       (Tensor s (LinearMap s u v) u))
 -> LinearFunction
      s
      (LinearFunction s (w, x) u)
      (LinearFunction
         s
         (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
         (Tensor s (LinearMap s u v) u)))
-> (LinearFunction s (w, x) u
    -> LinearFunction
         s
         (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
         (Tensor s (LinearMap s u v) u))
-> LinearFunction
     s
     (LinearFunction s (w, x) u)
     (LinearFunction
        s
        (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
        (Tensor s (LinearMap s u v) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s (w, x) u
f
                -> Coercion
  (LinearMap s u (Tensor s v u)) (Tensor s (LinearMap s u v) u)
-> LinearFunction
     s (LinearMap s u (Tensor s v u)) (Tensor s (LinearMap s u v) u)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s u (Tensor s v u)) (Tensor s (LinearMap s u v) u)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap LinearFunction
  s (LinearMap s u (Tensor s v u)) (Tensor s (LinearMap s u v) u)
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
     (LinearMap s u (Tensor s v u))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
     (Tensor s (LinearMap s u v) u)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction s (Tensor s v w, Tensor s v x) (Tensor s v u)
-> LinearFunction
     s
     (LinearMap s u (Tensor s v w), LinearMap s u (Tensor s v x))
     (LinearMap s u (Tensor s v u))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b c.
(Monoidal f r t, ObjectPair r a b, Object r c,
 ObjectPair t (f a) (f b), Object t (f c)) =>
r (a, b) c -> t (f a, f b) (f c)
fzipWith (LinearFunction s (w, x) u
-> LinearFunction s (Tensor s v w, Tensor s v x) (Tensor s v u)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b c.
(Monoidal f r t, ObjectPair r a b, Object r c,
 ObjectPair t (f a) (f b), Object t (f c)) =>
r (a, b) c -> t (f a, f b) (f c)
fzipWith LinearFunction s (w, x) u
f)
                     LinearFunction
  s
  (LinearMap s u (Tensor s v w), LinearMap s u (Tensor s v x))
  (LinearMap s u (Tensor s v u))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
     (LinearMap s u (Tensor s v w), LinearMap s u (Tensor s v x))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
     (LinearMap s u (Tensor s v u))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap LinearFunction
  s (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (LinearMap s u v) x) (LinearMap s u (Tensor s v x))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w, Tensor s (LinearMap s u v) x)
     (LinearMap s u (Tensor s v w), LinearMap s u (Tensor s v x))
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** Coercion
  (Tensor s (LinearMap s u v) x) (LinearMap s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (LinearMap s u v) x) (LinearMap s u (Tensor s v x))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) x) (LinearMap s u (Tensor s v x))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
  coerceFmapTensorProduct :: p (LinearMap s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (LinearMap s u v) a)
     (TensorProduct (LinearMap s u v) b)
coerceFmapTensorProduct = DualSpaceWitness u
-> p (LinearMap s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector u) (Tensor s v a))
     (TensorProduct (DualVector u) (Tensor s v b))
forall a b (p :: * -> *).
DualSpaceWitness u
-> p (LinearMap s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector u) (Tensor s v a))
     (TensorProduct (DualVector u) (Tensor s v b))
cftlp DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where cftlp ::  a b p . DualSpaceWitness u -> p (LinearMap s u v) -> Coercion a b
                   -> Coercion (TensorProduct (DualVector u) (Tensor s v a))
                               (TensorProduct (DualVector u) (Tensor s v b))
         cftlp :: DualSpaceWitness u
-> p (LinearMap s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector u) (Tensor s v a))
     (TensorProduct (DualVector u) (Tensor s v b))
cftlp DualSpaceWitness u
DualSpaceWitness p (LinearMap s u v)
_ Coercion a b
c
                   = [DualVector u]
-> Coercion (Tensor s v a) (Tensor s v b)
-> Coercion
     (TensorProduct (DualVector u) (Tensor s v a))
     (TensorProduct (DualVector u) (Tensor s v b))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[DualVector u])
                                             (Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion a b
c :: Coercion (va) (vb))
  wellDefinedVector :: LinearMap s u v -> Maybe (LinearMap s u v)
wellDefinedVector = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
      DualSpaceWitness u
DualSpaceWitness -> Coercion (LinearMap s u v) (Tensor s (DualVector u) v)
-> LinearMap s u v -> Tensor s (DualVector u) v
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (LinearMap s u v) (Tensor s (DualVector u) v)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor (LinearMap s u v -> Tensor s (DualVector u) v)
-> (Tensor s (DualVector u) v -> Maybe (LinearMap s u v))
-> LinearMap s u v
-> Maybe (LinearMap s u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Tensor s (DualVector u) v
-> Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor s (DualVector u) v
 -> Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v))
-> (Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v)
    -> Maybe (LinearMap s u v))
-> Tensor s (DualVector u) v
-> Maybe (LinearMap s u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v))
  (Maybe (LinearMap s u v))
-> Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v)
-> Maybe (LinearMap s u v)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (Tensor (Scalar (DualVector u)) (DualVector u) v) (LinearMap s u v)
-> Coercion
     (Maybe (Tensor (Scalar (DualVector u)) (DualVector u) v))
     (Maybe (LinearMap s u v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (Tensor (Scalar (DualVector u)) (DualVector u) v) (LinearMap s u v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor)
  wellDefinedTensor :: (LinearMap s u v ⊗ w) -> Maybe (LinearMap s u v ⊗ w)
wellDefinedTensor
      = Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap (Tensor s (LinearMap s u v) w -> LinearMap s u (Tensor s v w))
-> (LinearMap s u (Tensor s v w)
    -> Maybe (Tensor s (LinearMap s u v) w))
-> Tensor s (LinearMap s u v) w
-> Maybe (Tensor s (LinearMap s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearMap s u (Tensor s v w)
-> Maybe (LinearMap s u (Tensor s v w))
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector (LinearMap s u (Tensor s v w)
 -> Maybe (LinearMap s u (Tensor s v w)))
-> (Maybe (LinearMap s u (Tensor s v w))
    -> Maybe (Tensor s (LinearMap s u v) w))
-> LinearMap s u (Tensor s v w)
-> Maybe (Tensor s (LinearMap s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Maybe (LinearMap s u (Tensor s v w)))
  (Maybe (Tensor s (LinearMap s u v) w))
-> Maybe (LinearMap s u (Tensor s v w))
-> Maybe (Tensor s (LinearMap s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> Coercion
     (Maybe (LinearMap s u (Tensor s v w)))
     (Maybe (Tensor s (LinearMap s u v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap)

-- | @((u+>v)+>w) -> u⊗(v+>w)@
coCurryLinearMap ::  s u v w . ( LinearSpace u, Scalar u ~ s
                                , LinearSpace v, Scalar v ~ s ) =>
              Coercion (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap :: Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                        , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
     (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
             -> Coercion
  (LinearMap s (LinearMap s u v) w)
  (Tensor s (Tensor s u (DualVector v)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap s (LinearMap s u v) w)
  (Tensor s (Tensor s u (DualVector v)) w)
-> Coercion
     (Tensor s (Tensor s u (DualVector v)) w)
     (Tensor s u (LinearMap s v w))
-> Coercion
     (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s (Tensor s u (DualVector v)) w)
  (Tensor s u (Tensor s (DualVector v) w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor Coercion
  (Tensor s (Tensor s u (DualVector v)) w)
  (Tensor s u (Tensor s (DualVector v) w))
-> Coercion
     (Tensor s u (Tensor s (DualVector v) w))
     (Tensor s u (LinearMap s v w))
-> Coercion
     (Tensor s (Tensor s u (DualVector v)) w)
     (Tensor s u (LinearMap s v w))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Coercion
     (Tensor s u (Tensor s (DualVector v) w))
     (Tensor s u (LinearMap s v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap

-- | @(u⊗(v+>w)) -> (u+>v)+>w@
coUncurryLinearMap ::  s u v w . ( LinearSpace u, Scalar u ~ s
                                , LinearSpace v, Scalar v ~ s ) =>
              Coercion (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMap :: Coercion
  (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMap = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
     (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness)
             -> Coercion
  (Tensor s (Tensor s u (DualVector v)) w)
  (LinearMap s (LinearMap s u v) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor s (Tensor s u (DualVector v)) w)
  (LinearMap s (LinearMap s u v) w)
-> Coercion
     (Tensor s u (LinearMap s v w))
     (Tensor s (Tensor s u (DualVector v)) w)
-> Coercion
     (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor s u (Tensor s (DualVector v) w))
  (Tensor s (Tensor s u (DualVector v)) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion
  (Tensor s u (Tensor s (DualVector v) w))
  (Tensor s (Tensor s u (DualVector v)) w)
-> Coercion
     (Tensor s u (LinearMap s v w))
     (Tensor s u (Tensor s (DualVector v) w))
-> Coercion
     (Tensor s u (LinearMap s v w))
     (Tensor s (Tensor s u (DualVector v)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> Coercion
     (Tensor s u (LinearMap s v w))
     (Tensor s u (Tensor s (DualVector v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap

-- | @((u⊗v)+>w) -> (u+>(v+>w))@
curryLinearMap ::  u v w s . ( LinearSpace u, Scalar u ~ s )
           => Coercion (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap :: Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
           DualSpaceWitness u
DualSpaceWitness -> (Coercion
  (LinearMap
     (Scalar (Tensor (Scalar u) u v)) (Tensor (Scalar u) u v) w)
  (Tensor
     (Scalar (DualVector u)) (DualVector u) (Tensor s (DualVector v) w))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion ((uv)+>w)
                                     ((DualVector u)(Tensor s (DualVector v) w)) )
                                 Coercion
  (LinearMap s (Tensor s u v) w)
  (Tensor s (DualVector u) (Tensor s (DualVector v) w))
-> Coercion
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
     (LinearMap s u (LinearMap s v w))
-> Coercion
     (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
-> Coercion
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
     (Tensor s (DualVector u) (LinearMap s v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor s (DualVector u) (Tensor s (DualVector v) w))
  (Tensor s (DualVector u) (LinearMap s v w))
-> Coercion
     (Tensor s (DualVector u) (LinearMap s v w))
     (LinearMap s u (LinearMap s v w))
-> Coercion
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
     (LinearMap s u (LinearMap s v w))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s (DualVector u) (LinearMap s v w))
  (LinearMap s u (LinearMap s v w))
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor

-- | @(u+>(v+>w)) -> ((u⊗v)+>w)@
uncurryLinearMap ::  u v w s . ( LinearSpace u, Scalar u ~ s )
           => Coercion (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap :: Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
           DualSpaceWitness u
DualSpaceWitness -> (Coercion
  (Tensor
     (Scalar (DualVector u)) (DualVector u) (Tensor s (DualVector v) w))
  (LinearMap
     (Scalar (Tensor (Scalar u) u v)) (Tensor (Scalar u) u v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion 
                                     ((DualVector u)(Tensor s (DualVector v) w))
                                     ((uv)+>w) )
                                 Coercion
  (Tensor s (DualVector u) (Tensor s (DualVector v) w))
  (LinearMap s (Tensor s u v) w)
-> Coercion
     (LinearMap s u (LinearMap s v w))
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
-> Coercion
     (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
-> Coercion
     (Tensor s (DualVector u) (LinearMap s v w))
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (Tensor s (DualVector u) (LinearMap s v w))
  (Tensor s (DualVector u) (Tensor s (DualVector v) w))
-> Coercion
     (LinearMap s u (LinearMap s v w))
     (Tensor s (DualVector u) (LinearMap s v w))
-> Coercion
     (LinearMap s u (LinearMap s v w))
     (Tensor s (DualVector u) (Tensor s (DualVector v) w))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (LinearMap s u (LinearMap s v w))
  (Tensor s (DualVector u) (LinearMap s v w))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor

uncurryLinearFn :: ( Num' s, LSpace u, LSpace v, LSpace w
                   , Scalar u ~ s, Scalar v ~ s, Scalar w ~ s )
           => LinearFunction s u (LinearMap s v w) -+> LinearFunction s (Tensor s u v) w
uncurryLinearFn :: LinearFunction s u (LinearMap s v w)
-+> LinearFunction s (Tensor s u v) w
uncurryLinearFn = (LinearFunction s u (LinearMap (Scalar v) v w)
 -> Tensor (Scalar u) u v -> w)
-> LinearFunction
     s
     (LinearFunction s u (LinearMap (Scalar v) v w))
     (LinearFunction s (Tensor (Scalar u) u v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction
         ((LinearFunction s u (LinearMap (Scalar v) v w)
  -> Tensor (Scalar u) u v -> w)
 -> LinearFunction
      s
      (LinearFunction s u (LinearMap (Scalar v) v w))
      (LinearFunction s (Tensor (Scalar u) u v) w))
-> (LinearFunction s u (LinearMap (Scalar v) v w)
    -> Tensor (Scalar u) u v -> w)
-> LinearFunction
     s
     (LinearFunction s u (LinearMap (Scalar v) v w))
     (LinearFunction s (Tensor (Scalar u) u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s u (LinearMap (Scalar v) v w)
f Tensor (Scalar u) u v
t -> LinearFunction
  (Scalar w) (Tensor (Scalar v) v (LinearMap (Scalar v) v w)) w
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ (v +> w)) -+> w
contractMapTensor LinearFunction
  (Scalar w) (Tensor (Scalar v) v (LinearMap (Scalar v) v w)) w
-> LinearFunction
     (Scalar w)
     (Tensor (Scalar u) u v)
     (Tensor (Scalar v) v (LinearMap (Scalar v) v w))
-> LinearFunction (Scalar w) (Tensor (Scalar u) u v) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s u (LinearMap (Scalar v) v w)
-> LinearFunction
     (Scalar w)
     (Tensor (Scalar v) v u)
     (Tensor (Scalar v) v (LinearMap (Scalar v) v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s u (LinearMap (Scalar v) v w)
f LinearFunction
  (Scalar w)
  (Tensor (Scalar v) v u)
  (Tensor (Scalar v) v (LinearMap (Scalar v) v w))
-> LinearFunction
     (Scalar w) (Tensor (Scalar u) u v) (Tensor (Scalar v) v u)
-> LinearFunction
     (Scalar w)
     (Tensor (Scalar u) u v)
     (Tensor (Scalar v) v (LinearMap (Scalar v) v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar w) (Tensor (Scalar u) u v) (Tensor (Scalar v) v u)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction (Scalar w) (Tensor (Scalar u) u v) w
-> Tensor (Scalar u) u v -> w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar u) u v
t

instance  s u v . (LinearSpace u, LinearSpace v, Scalar u ~ s, Scalar v ~ s)
                       => LinearSpace (LinearMap s u v) where
  type DualVector (LinearMap s u v) = Tensor s u (DualVector v)
  dualSpaceWitness :: DualSpaceWitness (LinearMap s u v)
dualSpaceWitness = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
      (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> DualSpaceWitness (LinearMap s u v)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  linearId :: LinearMap s u v +> LinearMap s u v
linearId = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
     DualSpaceWitness u
DualSpaceWitness -> Coercion
  (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
  (LinearMap s (LinearMap s u v) (LinearMap s u v))
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
  (LinearMap s (LinearMap s u v) (LinearMap s u v))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap s (LinearMap s u v) (LinearMap s u v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
  (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion
  (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
  (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (Tensor s (Tensor s u (DualVector v)) (LinearMap s u v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
  (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap
     s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
  (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap
        s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (Tensor s u (Tensor s (DualVector v) (LinearMap s u v)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s v (LinearMap s u v))
  (Tensor s (DualVector v) (LinearMap s u v))
-> Coercion
     (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
     (LinearMap
        s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s v (LinearMap s u v))
  (Tensor s (DualVector v) (LinearMap s u v))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor
                            Coercion
  (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
  (LinearMap
     s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap
        s (DualVector u) (Tensor s (DualVector v) (LinearMap s u v)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (Tensor s (DualVector u) v) (LinearMap s u v))
  (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap s (Tensor s (DualVector u) v) (LinearMap s u v))
  (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap s (Tensor s (DualVector u) v) (LinearMap s u v))
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap s (DualVector u) (LinearMap s v (LinearMap s u v)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
-> Coercion
     (LinearMap
        s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
     (LinearMap s (Tensor s (DualVector u) v) (LinearMap s u v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (LinearMap
     s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v))
  (LinearMap s (LinearMap s u v) (LinearMap s u v))
-> LinearMap
     s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v)
-> LinearMap s (LinearMap s u v) (LinearMap s u v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (Tensor s (DualVector u) v) (Tensor s (DualVector u) v)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  tensorId :: (LinearMap s u v ⊗ w) +> (LinearMap s u v ⊗ w)
tensorId = Coercion
  (LinearMap
     s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
  (LinearMap
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap
     s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
  (LinearMap
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (LinearMap
        s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (LinearMap
        s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor
     s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
  (LinearMap
     s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMap Coercion
  (Tensor
     s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
  (LinearMap
     s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (Tensor
        s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (LinearMap
        s (LinearMap s u v) (LinearMap s w (Tensor s (LinearMap s u v) w)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w))
  (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w)))
-> Coercion
     (Tensor
        s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
     (Tensor
        s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w))
  (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap
               Coercion
  (Tensor
     s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
  (Tensor
     s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (Tensor
        s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (Tensor
        s u (LinearMap s v (LinearMap s w (Tensor s (LinearMap s u v) w))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w))
  (Tensor
     s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap Coercion
  (LinearMap
     s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w))
  (Tensor
     s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w))
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (Tensor
        s u (LinearMap s (Tensor s v w) (Tensor s (LinearMap s u v) w)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> Coercion
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
     (LinearMap
        s (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap Coercion
  (LinearMap
     s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w)))
  (LinearMap
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w))
-> LinearMap
     s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
-> LinearMap
     s (Tensor s (LinearMap s u v) w) (Tensor s (LinearMap s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  s (LinearMap s u (Tensor s v w)) (LinearMap s u (Tensor s v w))
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  coerceDoubleDual :: Coercion
  (LinearMap s u v) (DualVector (DualVector (LinearMap s u v)))
coerceDoubleDual = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
     DualSpaceWitness v
DualSpaceWitness -> Coercion
  (LinearMap s u v) (DualVector (DualVector (LinearMap s u v)))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  applyLinear :: Bilinear (LinearMap s u v +> w) (LinearMap s u v) w
applyLinear = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
    DualSpaceWitness u
DualSpaceWitness -> (LinearMap s (LinearMap s u v) w
 -> LinearMap s (DualVector (DualVector u)) v -> w)
-> LinearFunction
     s
     (LinearMap s (LinearMap s u v) w)
     (LinearFunction s (LinearMap s (DualVector (DualVector u)) v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (LinearMap s u v) w
  -> LinearMap s (DualVector (DualVector u)) v -> w)
 -> LinearFunction
      s
      (LinearMap s (LinearMap s u v) w)
      (LinearFunction s (LinearMap s (DualVector (DualVector u)) v) w))
-> (LinearMap s (LinearMap s u v) w
    -> LinearMap s (DualVector (DualVector u)) v -> w)
-> LinearFunction
     s
     (LinearMap s (LinearMap s u v) w)
     (LinearFunction s (LinearMap s (DualVector (DualVector u)) v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearMap s (LinearMap s u v) w
f LinearMap s (DualVector (DualVector u)) v
g
                  -> let tf :: LinearMap s (Tensor s (DualVector u) v) w
tf = Coercion
  (LinearMap s (LinearMap s u v) w)
  (LinearMap s (Tensor s (DualVector u) v) w)
forall s v w x.
(LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s) =>
Coercion
  (LinearMap s (LinearMap s v w) x)
  (LinearMap s (Tensor s (DualVector v) w) x)
argAsTensor Coercion
  (LinearMap s (LinearMap s u v) w)
  (LinearMap s (Tensor s (DualVector u) v) w)
-> LinearMap s (LinearMap s u v) w
-> LinearMap s (Tensor s (DualVector u) v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (LinearMap s u v) w
f
                     in (LinearFunction
  s
  (LinearMap s (Tensor s (DualVector u) v) w)
  (LinearFunction s (Tensor s (DualVector u) v) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  s
  (LinearMap s (Tensor s (DualVector u) v) w)
  (LinearFunction s (Tensor s (DualVector u) v) w)
-> LinearMap s (Tensor s (DualVector u) v) w
-> LinearFunction s (Tensor s (DualVector u) v) w
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap s (Tensor s (DualVector u) v) w
tf)LinearFunction s (Tensor s (DualVector u) v) w
-> Tensor s (DualVector u) v -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap s (DualVector (DualVector u)) v)
  (Tensor s (DualVector u) v)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap s (DualVector (DualVector u)) v)
  (Tensor s (DualVector u) v)
-> LinearMap s (DualVector (DualVector u)) v
-> Tensor s (DualVector u) v
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (DualVector (DualVector u)) v
g
  applyDualVector :: Bilinear
  (DualVector (LinearMap s u v))
  (LinearMap s u v)
  (Scalar (LinearMap s u v))
applyDualVector = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
    DualSpaceWitness v
DualSpaceWitness -> Bilinear (LinearMap s u v) (Tensor (Scalar u) u (DualVector v)) s
-> Bilinear
     (Tensor (Scalar u) u (DualVector v)) (LinearMap s u v) s
forall v w y. Bilinear v w y -> Bilinear w v y
flipBilin Bilinear (LinearMap s u v) (Tensor (Scalar u) u (DualVector v)) s
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctional
  applyTensorFunctional :: Bilinear
  (DualVector (LinearMap s u v ⊗ u))
  (LinearMap s u v ⊗ u)
  (Scalar (LinearMap s u v))
applyTensorFunctional = ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness u
-> Bilinear ((u +> v) +> DualVector u) ((u +> v) ⊗ u) s
forall w.
(LinearSpace w, Scalar w ~ s) =>
ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness w
-> Bilinear ((u +> v) +> DualVector w) ((u +> v) ⊗ w) s
atf ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where atf ::  w . (LinearSpace w, Scalar w ~ s)
                   => ScalarSpaceWitness u -> DualSpaceWitness u -> DualSpaceWitness w
                       -> Bilinear ((u+>v)+>DualVector w) ((u+>v)w) s
         atf :: ScalarSpaceWitness u
-> DualSpaceWitness u
-> DualSpaceWitness w
-> Bilinear ((u +> v) +> DualVector w) ((u +> v) ⊗ w) s
atf ScalarSpaceWitness u
ScalarSpaceWitness DualSpaceWitness u
DualSpaceWitness DualSpaceWitness w
DualSpaceWitness
              = Coercion
  (LinearMap s (LinearMap s u v) (DualVector w))
  (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
-> LinearFunction
     (Scalar (DualVector u))
     (LinearMap s (LinearMap s u v) (DualVector w))
     (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s (LinearMap s u v) (DualVector w))
  (Tensor s u (LinearMap s v (DualVector w)))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap Coercion
  (LinearMap s (LinearMap s u v) (DualVector w))
  (Tensor s u (LinearMap s v (DualVector w)))
-> Coercion
     (Tensor s u (LinearMap s v (DualVector w)))
     (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
-> Coercion
     (LinearMap s (LinearMap s u v) (DualVector w))
     (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor s u (LinearMap s v (DualVector w)))
  (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (Tensor s v w) (LinearMap s (DualVector v) w)
asLinearMap)
                           LinearFunction
  (Scalar (DualVector u))
  (LinearMap s (LinearMap s u v) (DualVector w))
  (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
-> LinearFunction
     (Scalar (DualVector u))
     (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
-> LinearFunction
     (Scalar (DualVector u))
     (LinearMap s (LinearMap s u v) (DualVector w))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (DualVector u))
  (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
  (LinearFunction
     (Scalar (DualVector u))
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
     (Scalar (DualVector u)))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctional LinearFunction
  (Scalar (DualVector u))
  (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
  (LinearFunction
     (Scalar (DualVector u))
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
     (Scalar (DualVector u)))
-> LinearFunction
     (Scalar (DualVector u))
     (LinearFunction
        (Scalar (DualVector u))
        (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
        (Scalar (DualVector u)))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
-> LinearFunction
     (Scalar (DualVector u))
     (LinearMap s (DualVector u) (LinearMap s v (DualVector w)))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearFunction
   s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
 -> Tensor s (LinearMap s u v) w -> s)
-> LinearFunction
     (Scalar (DualVector u))
     (LinearFunction
        (Scalar (DualVector u))
        (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
        (Scalar (DualVector u)))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction((LinearFunction
    s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
  -> Tensor s (LinearMap s u v) w -> s)
 -> LinearFunction
      (Scalar (DualVector u))
      (LinearFunction
         (Scalar (DualVector u))
         (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
         (Scalar (DualVector u)))
      (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s))
-> (LinearFunction
      s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
    -> Tensor s (LinearMap s u v) w -> s)
-> LinearFunction
     (Scalar (DualVector u))
     (LinearFunction
        (Scalar (DualVector u))
        (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
        (Scalar (DualVector u)))
     (LinearFunction (Scalar s) (Tensor s (LinearMap s u v) w) s)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`\LinearFunction
  s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
f Tensor s (LinearMap s u v) w
t
                     -> LinearFunction
  s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
f LinearFunction
  s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w)) s
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
-> LinearFunction s (Tensor s (LinearMap s u v) w) s
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) w)
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) w)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s u (Tensor s v w))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap s u (Tensor s v w))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
-> Coercion
     (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
-> Coercion
     (Tensor s (LinearMap s u v) w)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap) LinearFunction s (Tensor s (LinearMap s u v) w) s
-> Tensor s (LinearMap s u v) w -> s
forall s v w. LinearFunction s v w -> v -> w
-+$> Tensor s (LinearMap s u v) w
t
  applyTensorLinMap :: Bilinear ((LinearMap s u v ⊗ u) +> w) (LinearMap s u v ⊗ u) w
applyTensorLinMap = case DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u of
    DualSpaceWitness u
DualSpaceWitness -> (LinearMap s (Tensor s (LinearMap s u v) u) w
 -> LinearFunction s (Tensor s (LinearMap s u v) u) w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (LinearMap s u v) u) w)
     (LinearFunction s (Tensor s (LinearMap s u v) u) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearMap s (Tensor s (LinearMap s u v) u) w
  -> LinearFunction s (Tensor s (LinearMap s u v) u) w)
 -> LinearFunction
      s
      (LinearMap s (Tensor s (LinearMap s u v) u) w)
      (LinearFunction s (Tensor s (LinearMap s u v) u) w))
-> (LinearMap s (Tensor s (LinearMap s u v) u) w
    -> LinearFunction s (Tensor s (LinearMap s u v) u) w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (LinearMap s u v) u) w)
     (LinearFunction s (Tensor s (LinearMap s u v) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                 Coercion
  (LinearMap s (Tensor s (LinearMap s u v) u) w)
  (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> LinearMap s (Tensor s (LinearMap s u v) u) w
-> LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s (Tensor s (LinearMap s u v) u) w)
  (LinearMap s (LinearMap s u v) (LinearMap s u w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMapCoercion
  (LinearMap s (Tensor s (LinearMap s u v) u) w)
  (LinearMap s (LinearMap s u v) (LinearMap s u w))
-> Coercion
     (LinearMap s (LinearMap s u v) (LinearMap s u w))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> Coercion
     (LinearMap s (Tensor s (LinearMap s u v) u) w)
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s (LinearMap s u v) (LinearMap s u w))
  (Tensor s u (LinearMap s v (LinearMap s u w)))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap
                             Coercion
  (LinearMap s (LinearMap s u v) (LinearMap s u w))
  (Tensor s u (LinearMap s v (LinearMap s u w)))
-> Coercion
     (Tensor s u (LinearMap s v (LinearMap s u w)))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> Coercion
     (LinearMap s (LinearMap s u v) (LinearMap s u w))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s v (LinearMap s u w)) (LinearMap s (Tensor s v u) w)
-> Coercion
     (Tensor s u (LinearMap s v (LinearMap s u w)))
     (Tensor s u (LinearMap s (Tensor s v u) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s v (LinearMap s u w)) (LinearMap s (Tensor s v u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMapCoercion
  (Tensor s u (LinearMap s v (LinearMap s u w)))
  (Tensor s u (LinearMap s (Tensor s v u) w))
-> Coercion
     (Tensor s u (LinearMap s (Tensor s v u) w))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> Coercion
     (Tensor s u (LinearMap s v (LinearMap s u w)))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (Tensor s u (LinearMap s (Tensor s v u) w))
  (LinearMap s (LinearMap s u (Tensor s v u)) w)
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (Tensor s u (LinearMap s v w)) (LinearMap s (LinearMap s u v) w)
coUncurryLinearMapCoercion
  (Tensor s u (LinearMap s (Tensor s v u) w))
  (LinearMap s (LinearMap s u (Tensor s v u)) w)
-> Coercion
     (LinearMap s (LinearMap s u (Tensor s v u)) w)
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> Coercion
     (Tensor s u (LinearMap s (Tensor s v u) w))
     (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s (LinearMap s u (Tensor s v u)) w)
  (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
forall s v w x.
(LinearSpace v, LinearSpace w, Scalar v ~ s, Scalar w ~ s) =>
Coercion
  (LinearMap s (LinearMap s v w) x)
  (LinearMap s (Tensor s (DualVector v) w) x)
argAsTensor)
                  (LinearMap s (Tensor s (LinearMap s u v) u) w
 -> LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w)
-> (LinearMap s (Tensor s (DualVector u) (Tensor s v u)) w
    -> LinearFunction s (Tensor s (LinearMap s u v) u) w)
-> LinearMap s (Tensor s (LinearMap s u v) u) w
-> LinearFunction s (Tensor s (LinearMap s u v) u) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> \LinearMap
  (Scalar (DualVector u))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
  w
f -> (Tensor s (LinearMap s u v) u -> w)
-> LinearFunction s (Tensor s (LinearMap s u v) u) w
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor s (LinearMap s u v) u -> w)
 -> LinearFunction s (Tensor s (LinearMap s u v) u) w)
-> (Tensor s (LinearMap s u v) u -> w)
-> LinearFunction s (Tensor s (LinearMap s u v) u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Tensor s (LinearMap s u v) u
g
                               -> (LinearFunction
  s
  (LinearMap
     (Scalar (DualVector u))
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
     w)
  (LinearFunction
     s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u)) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  s
  (LinearMap
     (Scalar (DualVector u))
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
     w)
  (LinearFunction
     s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u)) w)
-> LinearMap
     (Scalar (DualVector u))
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
     w
-> LinearFunction
     s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u)) w
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap
  (Scalar (DualVector u))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
  w
f)
                                   LinearFunction
  s (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u)) w
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) u)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
-> LinearFunction s (Tensor s (LinearMap s u v) u) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) u)
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
-> LinearFunction
     s
     (Tensor s (LinearMap s u v) u)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s u (Tensor s v u))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap s u (Tensor s v u))
  (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
-> Coercion
     (Tensor s (LinearMap s u v) u) (LinearMap s u (Tensor s v u))
-> Coercion
     (Tensor s (LinearMap s u v) u)
     (Tensor (Scalar (DualVector u)) (DualVector u) (Tensor s v u))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s u v) u) (LinearMap s u (Tensor s v u))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap) LinearFunction s (Tensor s (LinearMap s u v) u) w
-> Tensor s (LinearMap s u v) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$> Tensor s (LinearMap s u v) u
g
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError

instance  s u v . (TensorSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s)
                       => TensorSpace (Tensor s u v) where
  type TensorProduct (Tensor s u v) w = TensorProduct u (Tensor s v w)
  scalarSpaceWitness :: ScalarSpaceWitness (Tensor s u v)
scalarSpaceWitness = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                            , ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, ScalarSpaceWitness v
ScalarSpaceWitness) -> ScalarSpaceWitness (Tensor s u v)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (Tensor s u v)
linearManifoldWitness = case ( LinearManifoldWitness u
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness u
                             , LinearManifoldWitness v
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness v ) of
       ( LinearManifoldWitness u
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
            BoundarylessWitness
#endif
        ,LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
            BoundarylessWitness
#endif
        )
         -> LinearManifoldWitness (Tensor s u v)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
             BoundarylessWitness
#endif
  zeroTensor :: Tensor s u v ⊗ w
zeroTensor = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> Tensor s u (Tensor s v w) -> Tensor s (Tensor s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s u (Tensor s v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  toFlatTensor :: Tensor s u v -+> (Tensor s u v ⊗ Scalar (Tensor s u v))
toFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> Coercion (Tensor s u (Tensor s v s)) (Tensor s (Tensor s u v) s)
-> LinearFunction
     s (Tensor s u (Tensor s v s)) (Tensor s (Tensor s u v) s)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v s)) (Tensor s (Tensor s u v) s)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  s (Tensor s u (Tensor s v s)) (Tensor s (Tensor s u v) s)
-> LinearFunction s (Tensor s u v) (Tensor s u (Tensor s v s))
-> LinearFunction s (Tensor s u v) (Tensor s (Tensor s u v) s)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s v (Tensor s v s)
-> LinearFunction s (Tensor s u v) (Tensor s u (Tensor s v s))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s v (Tensor s v s)
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
  fromFlatTensor :: (Tensor s u v ⊗ Scalar (Tensor s u v)) -+> Tensor s u v
fromFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction s (Tensor s v s) v
-> LinearFunction s (Tensor s u (Tensor s v s)) (Tensor s u v)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s (Tensor s v s) v
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor LinearFunction s (Tensor s u (Tensor s v s)) (Tensor s u v)
-> LinearFunction
     s (Tensor s (Tensor s u v) s) (Tensor s u (Tensor s v s))
-> LinearFunction s (Tensor s (Tensor s u v) s) (Tensor s u v)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) s) (Tensor s u (Tensor s v s))
-> LinearFunction
     s (Tensor s (Tensor s u v) s) (Tensor s u (Tensor s v s))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) s) (Tensor s u (Tensor s v s))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  addTensors :: (Tensor s u v ⊗ w) -> (Tensor s u v ⊗ w) -> Tensor s u v ⊗ w
addTensors Tensor s u v ⊗ w
t₁ Tensor s u v ⊗ w
t₂ = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> Tensor s u (Tensor s v w) -> Tensor s (Tensor s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensorCoercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (Tensor s u v) w
Tensor s u v ⊗ w
t₁) Tensor s u (Tensor s v w)
-> Tensor s u (Tensor s v w) -> Tensor s u (Tensor s v w)
forall v. AdditiveGroup v => v -> v -> v
^+^ (Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensorCoercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (Tensor s u v) w
Tensor s u v ⊗ w
t₂)
  subtractTensors :: (Tensor s u v ⊗ w) -> (Tensor s u v ⊗ w) -> Tensor s u v ⊗ w
subtractTensors Tensor s u v ⊗ w
t₁ Tensor s u v ⊗ w
t₂ = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> Tensor s u (Tensor s v w) -> Tensor s (Tensor s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensorCoercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (Tensor s u v) w
Tensor s u v ⊗ w
t₁) Tensor s u (Tensor s v w)
-> Tensor s u (Tensor s v w) -> Tensor s u (Tensor s v w)
forall v. AdditiveGroup v => v -> v -> v
^-^ (Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensorCoercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (Tensor s u v) w
Tensor s u v ⊗ w
t₂)
  scaleTensor :: Bilinear
  (Scalar (Tensor s u v)) (Tensor s u v ⊗ w) (Tensor s u v ⊗ w)
scaleTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness ->
        (s
 -> LinearFunction
      s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
-> LinearFunction
     s
     s
     (LinearFunction
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((s
  -> LinearFunction
       s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
 -> LinearFunction
      s
      s
      (LinearFunction
         s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w)))
-> (s
    -> LinearFunction
         s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
-> LinearFunction
     s
     s
     (LinearFunction
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \s
μ -> Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. s
-> LinearFunction
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
forall v s.
(VectorSpace v, Scalar v ~ s) =>
s -> LinearFunction s v v
scaleWith s
μ LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  negateTensor :: (Tensor s u v ⊗ w) -+> (Tensor s u v ⊗ w)
negateTensor = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
forall w s. AdditiveGroup w => LinearFunction s w w
lNegateV LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  tensorProduct :: Bilinear (Tensor s u v) w (Tensor s u v ⊗ w)
tensorProduct = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction
  (Scalar w)
  w
  (LinearFunction
     (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
-> LinearFunction
     s (Tensor s u v) (LinearFunction s w (Tensor s (Tensor s u v) w))
forall v w y. Bilinear v w y -> Bilinear w v y
flipBilin (LinearFunction
   (Scalar w)
   w
   (LinearFunction
      (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
 -> LinearFunction
      s (Tensor s u v) (LinearFunction s w (Tensor s (Tensor s u v) w)))
-> LinearFunction
     (Scalar w)
     w
     (LinearFunction
        (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
-> LinearFunction
     s (Tensor s u v) (LinearFunction s w (Tensor s (Tensor s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (w
 -> LinearFunction
      (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
-> LinearFunction
     (Scalar w)
     w
     (LinearFunction
        (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((w
  -> LinearFunction
       (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
 -> LinearFunction
      (Scalar w)
      w
      (LinearFunction
         (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w)))
-> (w
    -> LinearFunction
         (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
-> LinearFunction
     (Scalar w)
     w
     (LinearFunction
        (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w
w
             -> Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     (Scalar w) (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  (Scalar w) (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> LinearFunction
     (Scalar w) (Tensor s u v) (Tensor s u (Tensor s v w))
-> LinearFunction
     (Scalar w) (Tensor s u v) (Tensor s (Tensor s u v) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar w) v (Tensor s v w)
-> LinearFunction
     (Scalar w) (Tensor s u v) (Tensor s u (Tensor s v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Bilinear v w (Tensor (Scalar v) v w)
-> Bilinear w v (Tensor (Scalar v) v w)
forall v w y. Bilinear v w y -> Bilinear w v y
flipBilin Bilinear v w (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction s w (LinearFunction (Scalar w) v (Tensor s v w))
-> w -> LinearFunction (Scalar w) v (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w)
  transposeTensor :: (Tensor s u v ⊗ w) -+> (w ⊗ Tensor s u v)
transposeTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction (Scalar u) (Tensor s v u) (Tensor s u v)
-> LinearFunction
     s (Tensor s w (Tensor s v u)) (Tensor s w (Tensor s u v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction (Scalar u) (Tensor s v u) (Tensor s u v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s (Tensor s w (Tensor s v u)) (Tensor s w (Tensor s u v))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s w (Tensor s v u))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s w (Tensor s u v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s w v) u) (Tensor s w (Tensor s v u))
-> LinearFunction
     s (Tensor s (Tensor s w v) u) (Tensor s w (Tensor s v u))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s w v) u) (Tensor s w (Tensor s v u))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
                       LinearFunction
  s (Tensor s (Tensor s w v) u) (Tensor s w (Tensor s v u))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s w v) u)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s w (Tensor s v u))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (Tensor s u (Tensor s w v)) (Tensor s (Tensor s w v) u)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s (Tensor s u (Tensor s w v)) (Tensor s (Tensor s w v) u)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s w v))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s w v) u)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar w) (Tensor s v w) (Tensor s w v)
-> LinearFunction
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s w v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction (Scalar w) (Tensor s v w) (Tensor s w v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s w v))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s w v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  fmapTensor :: Bilinear (w -+> x) (Tensor s u v ⊗ w) (Tensor s u v ⊗ x)
fmapTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s w x
 -> LinearFunction
      s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x))
-> LinearFunction
     s
     (LinearFunction s w x)
     (LinearFunction
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s w x
  -> LinearFunction
       s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x))
 -> LinearFunction
      s
      (LinearFunction s w x)
      (LinearFunction
         s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x)))
-> (LinearFunction s w x
    -> LinearFunction
         s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x))
-> LinearFunction
     s
     (LinearFunction s w x)
     (LinearFunction
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s w x
f
                -> Coercion (Tensor s u (Tensor s v x)) (Tensor s (Tensor s u v) x)
-> LinearFunction
     s (Tensor s u (Tensor s v x)) (Tensor s (Tensor s u v) x)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v x)) (Tensor s (Tensor s u v) x)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  s (Tensor s u (Tensor s v x)) (Tensor s (Tensor s u v) x)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) x)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction s (Tensor s v w) (Tensor s v x)
-> LinearFunction
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v x))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction s w x
-> LinearFunction s (Tensor s v w) (Tensor s v x)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s w x
f) LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v x))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (Tensor s u v ⊗ w, Tensor s u v ⊗ x)
  (Tensor s u v ⊗ u)
fzipTensorWith = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s (w, x) u
 -> LinearFunction
      s
      (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
      (Tensor s (Tensor s u v) u))
-> LinearFunction
     s
     (LinearFunction s (w, x) u)
     (LinearFunction
        s
        (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
        (Tensor s (Tensor s u v) u))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s (w, x) u
  -> LinearFunction
       s
       (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
       (Tensor s (Tensor s u v) u))
 -> LinearFunction
      s
      (LinearFunction s (w, x) u)
      (LinearFunction
         s
         (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
         (Tensor s (Tensor s u v) u)))
-> (LinearFunction s (w, x) u
    -> LinearFunction
         s
         (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
         (Tensor s (Tensor s u v) u))
-> LinearFunction
     s
     (LinearFunction s (w, x) u)
     (LinearFunction
        s
        (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
        (Tensor s (Tensor s u v) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s (w, x) u
f
                -> Coercion (Tensor s u (Tensor s v u)) (Tensor s (Tensor s u v) u)
-> LinearFunction
     s (Tensor s u (Tensor s v u)) (Tensor s (Tensor s u v) u)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s u (Tensor s v u)) (Tensor s (Tensor s u v) u)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor LinearFunction
  s (Tensor s u (Tensor s v u)) (Tensor s (Tensor s u v) u)
-> LinearFunction
     s
     (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
     (Tensor s u (Tensor s v u))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
     (Tensor s (Tensor s u v) u)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction s (Tensor s v w, Tensor s v x) (Tensor s v u)
-> LinearFunction
     s
     (Tensor s u (Tensor s v w), Tensor s u (Tensor s v x))
     (Tensor s u (Tensor s v u))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b c.
(Monoidal f r t, ObjectPair r a b, Object r c,
 ObjectPair t (f a) (f b), Object t (f c)) =>
r (a, b) c -> t (f a, f b) (f c)
fzipWith (LinearFunction s (w, x) u
-> LinearFunction s (Tensor s v w, Tensor s v x) (Tensor s v u)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b c.
(Monoidal f r t, ObjectPair r a b, Object r c,
 ObjectPair t (f a) (f b), Object t (f c)) =>
r (a, b) c -> t (f a, f b) (f c)
fzipWith LinearFunction s (w, x) u
f)
                     LinearFunction
  s
  (Tensor s u (Tensor s v w), Tensor s u (Tensor s v x))
  (Tensor s u (Tensor s v u))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
     (Tensor s u (Tensor s v w), Tensor s u (Tensor s v x))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
     (Tensor s u (Tensor s v u))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor LinearFunction
  s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) x) (Tensor s u (Tensor s v x))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) w, Tensor s (Tensor s u v) x)
     (Tensor s u (Tensor s v w), Tensor s u (Tensor s v x))
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** Coercion (Tensor s (Tensor s u v) x) (Tensor s u (Tensor s v x))
-> LinearFunction
     s (Tensor s (Tensor s u v) x) (Tensor s u (Tensor s v x))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) x) (Tensor s u (Tensor s v x))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  coerceFmapTensorProduct :: p (Tensor s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (Tensor s u v) a) (TensorProduct (Tensor s u v) b)
coerceFmapTensorProduct = p (Tensor s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (Tensor s u v) a) (TensorProduct (Tensor s u v) b)
forall a b (p :: * -> *).
p (Tensor s u v)
-> Coercion a b
-> Coercion
     (TensorProduct u (Tensor s v a)) (TensorProduct u (Tensor s v b))
cftlp
   where cftlp ::  a b p . p (Tensor s u v) -> Coercion a b
                   -> Coercion (TensorProduct u (Tensor s v a))
                               (TensorProduct u (Tensor s v b))
         cftlp :: p (Tensor s u v)
-> Coercion a b
-> Coercion
     (TensorProduct u (Tensor s v a)) (TensorProduct u (Tensor s v b))
cftlp p (Tensor s u v)
_ Coercion a b
c = [u]
-> Coercion (Tensor s v a) (Tensor s v b)
-> Coercion
     (TensorProduct u (Tensor s v a)) (TensorProduct u (Tensor s v b))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[u])
                                             (Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion a b
c :: Coercion (va) (vb))
  wellDefinedVector :: Tensor s u v -> Maybe (Tensor s u v)
wellDefinedVector = Tensor s u v -> Maybe (Tensor s u v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor
  wellDefinedTensor :: (Tensor s u v ⊗ w) -> Maybe (Tensor s u v ⊗ w)
wellDefinedTensor = Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor (Tensor s (Tensor s u v) w -> Tensor s u (Tensor s v w))
-> (Tensor s u (Tensor s v w) -> Maybe (Tensor s (Tensor s u v) w))
-> Tensor s (Tensor s u v) w
-> Maybe (Tensor s (Tensor s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Tensor s u (Tensor s v w) -> Maybe (Tensor s u (Tensor s v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor s u (Tensor s v w) -> Maybe (Tensor s u (Tensor s v w)))
-> (Maybe (Tensor s u (Tensor s v w))
    -> Maybe (Tensor s (Tensor s u v) w))
-> Tensor s u (Tensor s v w)
-> Maybe (Tensor s (Tensor s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Maybe (Tensor s u (Tensor s v w)))
  (Maybe (Tensor s (Tensor s u v) w))
-> Maybe (Tensor s u (Tensor s v w))
-> Maybe (Tensor s (Tensor s u v) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> Coercion
     (Maybe (Tensor s u (Tensor s v w)))
     (Maybe (Tensor s (Tensor s u v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor)
instance  s u v . (LinearSpace u, LinearSpace v, Scalar u ~ s, Scalar v ~ s)
                       => LinearSpace (Tensor s u v) where
  type DualVector (Tensor s u v) = LinearMap s u (DualVector v)
  linearId :: Tensor s u v +> Tensor s u v
linearId = Tensor s u v +> Tensor s u v
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  tensorId :: (Tensor s u v ⊗ w) +> (Tensor s u v ⊗ w)
tensorId = Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
-> Coercion
     (LinearMap
        s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
forall s u v w.
Coercion (Tensor s u (Tensor s v w)) (Tensor s (Tensor s u v) w)
lassocTensor Coercion
  (LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
  (LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
  (LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap
     s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
  (LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
  (LinearMap
     s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap
               Coercion
  (LinearMap
     s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
  (LinearMap
     s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s (Tensor s u v) (LinearMap s w (Tensor s u (Tensor s v w))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w)))
  (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w))))
-> Coercion
     (LinearMap
        s u (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w))))
     (LinearMap
        s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w)))
  (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w))))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap
     s u (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w))))
  (LinearMap
     s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s u (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w))))
-> Coercion
     (LinearMap
        s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
     (LinearMap
        s u (LinearMap s v (LinearMap s w (Tensor s u (Tensor s v w)))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
  (LinearMap
     s u (LinearMap s (Tensor s v w) (Tensor s u (Tensor s v w))))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w)))
  (LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w))
-> LinearMap
     s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
-> LinearMap
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (Tensor s u (Tensor s v w)) (Tensor s u (Tensor s v w))
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  coerceDoubleDual :: Coercion (Tensor s u v) (DualVector (DualVector (Tensor s u v)))
coerceDoubleDual = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
    (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> Coercion (Tensor s u v) (DualVector (DualVector (Tensor s u v)))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  dualSpaceWitness :: DualSpaceWitness (Tensor s u v)
dualSpaceWitness = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
    (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> DualSpaceWitness (Tensor s u v)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  applyLinear :: Bilinear (Tensor s u v +> w) (Tensor s u v) w
applyLinear = Bilinear (Tensor s u v +> w) (Tensor s u v) w
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMap
  applyDualVector :: Bilinear
  (DualVector (Tensor s u v)) (Tensor s u v) (Scalar (Tensor s u v))
applyDualVector = Bilinear
  (DualVector (Tensor s u v)) (Tensor s u v) (Scalar (Tensor s u v))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctional
  applyTensorFunctional :: Bilinear
  (DualVector (Tensor s u v ⊗ u))
  (Tensor s u v ⊗ u)
  (Scalar (Tensor s u v))
applyTensorFunctional = ScalarSpaceWitness u
-> DualSpaceWitness u
-> Bilinear
     (LinearMap s (Tensor s u v) (DualVector u))
     (Tensor s (Tensor s u v) u)
     s
forall w.
(LinearSpace w, Scalar w ~ s) =>
ScalarSpaceWitness u
-> DualSpaceWitness w
-> Bilinear
     (LinearMap s (Tensor s u v) (DualVector w))
     (Tensor s (Tensor s u v) w)
     s
atf ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where atf ::  w . (LinearSpace w, Scalar w ~ s)
               => ScalarSpaceWitness u -> DualSpaceWitness w
                  -> Bilinear (LinearMap s (Tensor s u v) (DualVector w))
                              (Tensor s (Tensor s u v) w)
                              s
         atf :: ScalarSpaceWitness u
-> DualSpaceWitness w
-> Bilinear
     (LinearMap s (Tensor s u v) (DualVector w))
     (Tensor s (Tensor s u v) w)
     s
atf ScalarSpaceWitness u
ScalarSpaceWitness DualSpaceWitness w
DualSpaceWitness
             = Coercion
  (LinearMap s (Tensor s u v) (DualVector w))
  (LinearMap s u (LinearMap s v (DualVector w)))
-> LinearFunction
     (Scalar u)
     (LinearMap s (Tensor s u v) (DualVector w))
     (LinearMap s u (LinearMap s v (DualVector w)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s (Tensor s u v) (DualVector w))
  (LinearMap s u (LinearMap s v (DualVector w)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap LinearFunction
  (Scalar u)
  (LinearMap s (Tensor s u v) (DualVector w))
  (LinearMap s u (LinearMap s v (DualVector w)))
-> LinearFunction
     (Scalar u)
     (LinearMap s u (LinearMap s v (DualVector w)))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
-> LinearFunction
     (Scalar u)
     (LinearMap s (Tensor s u v) (DualVector w))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar u)
  (LinearMap s u (LinearMap s v (DualVector w)))
  (LinearFunction
     (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctional
                           LinearFunction
  (Scalar u)
  (LinearMap s u (LinearMap s v (DualVector w)))
  (LinearFunction
     (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
-> LinearFunction
     (Scalar u)
     (LinearFunction
        (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
-> LinearFunction
     (Scalar u)
     (LinearMap s u (LinearMap s v (DualVector w)))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearFunction
   (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u)
 -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
-> LinearFunction
     s
     (LinearFunction
        (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction((LinearFunction
    (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u)
  -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
 -> LinearFunction
      s
      (LinearFunction
         (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
      (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s))
-> (LinearFunction (Scalar u) (Tensor s u (Tensor s v w)) s
    -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
-> LinearFunction
     (Scalar u)
     (LinearFunction
        (Scalar u) (Tensor (Scalar u) u (Tensor s v w)) (Scalar u))
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`\LinearFunction (Scalar u) (Tensor s u (Tensor s v w)) s
f -> LinearFunction (Scalar u) (Tensor s u (Tensor s v w)) s
f LinearFunction (Scalar u) (Tensor s u (Tensor s v w)) s
-> LinearFunction
     (Scalar u) (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction (Scalar u) (Tensor s (Tensor s u v) w) s
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     (Scalar u) (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  applyTensorLinMap :: Bilinear ((Tensor s u v ⊗ u) +> w) (Tensor s u v ⊗ u) w
applyTensorLinMap = (LinearMap s (Tensor s (Tensor s u v) u) w
 -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (Tensor s u v) u) w)
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearMap s (Tensor s (Tensor s u v) u) w
  -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
 -> LinearFunction
      s
      (LinearMap s (Tensor s (Tensor s u v) u) w)
      (LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w))
-> (LinearMap s (Tensor s (Tensor s u v) u) w
    -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (Tensor s u v) u) w)
     (LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (LinearMap s (Tensor s (Tensor s u v) u) w)
  (LinearMap s (Tensor s u (Tensor s v u)) w)
-> LinearMap s (Tensor s (Tensor s u v) u) w
-> LinearMap s (Tensor s u (Tensor s v u)) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s (Tensor s (Tensor s u v) u) w)
  (LinearMap s (Tensor s u v) (LinearMap s u w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMapCoercion
  (LinearMap s (Tensor s (Tensor s u v) u) w)
  (LinearMap s (Tensor s u v) (LinearMap s u w))
-> Coercion
     (LinearMap s (Tensor s u v) (LinearMap s u w))
     (LinearMap s (Tensor s u (Tensor s v u)) w)
-> Coercion
     (LinearMap s (Tensor s (Tensor s u v) u) w)
     (LinearMap s (Tensor s u (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s (Tensor s u v) (LinearMap s u w))
  (LinearMap s u (LinearMap s v (LinearMap s u w)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap
                            Coercion
  (LinearMap s (Tensor s u v) (LinearMap s u w))
  (LinearMap s u (LinearMap s v (LinearMap s u w)))
-> Coercion
     (LinearMap s u (LinearMap s v (LinearMap s u w)))
     (LinearMap s (Tensor s u (Tensor s v u)) w)
-> Coercion
     (LinearMap s (Tensor s u v) (LinearMap s u w))
     (LinearMap s (Tensor s u (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s v (LinearMap s u w)) (LinearMap s (Tensor s v u) w)
-> Coercion
     (LinearMap s u (LinearMap s v (LinearMap s u w)))
     (LinearMap s u (LinearMap s (Tensor s v u) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s v (LinearMap s u w)) (LinearMap s (Tensor s v u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMapCoercion
  (LinearMap s u (LinearMap s v (LinearMap s u w)))
  (LinearMap s u (LinearMap s (Tensor s v u) w))
-> Coercion
     (LinearMap s u (LinearMap s (Tensor s v u) w))
     (LinearMap s (Tensor s u (Tensor s v u)) w)
-> Coercion
     (LinearMap s u (LinearMap s v (LinearMap s u w)))
     (LinearMap s (Tensor s u (Tensor s v u)) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>>Coercion
  (LinearMap s u (LinearMap s (Tensor s v u) w))
  (LinearMap s (Tensor s u (Tensor s v u)) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap)
                        (LinearMap s (Tensor s (Tensor s u v) u) w
 -> LinearMap s (Tensor s u (Tensor s v u)) w)
-> (LinearMap s (Tensor s u (Tensor s v u)) w
    -> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w)
-> LinearMap s (Tensor s (Tensor s u v) u) w
-> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> \LinearMap (Scalar u) (Tensor (Scalar u) u (Tensor s v u)) w
f -> (LinearFunction
  s
  (LinearMap (Scalar u) (Tensor (Scalar u) u (Tensor s v u)) w)
  (LinearFunction (Scalar u) (Tensor s u (Tensor s v u)) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  s
  (LinearMap (Scalar u) (Tensor (Scalar u) u (Tensor s v u)) w)
  (LinearFunction (Scalar u) (Tensor s u (Tensor s v u)) w)
-> LinearMap (Scalar u) (Tensor (Scalar u) u (Tensor s v u)) w
-> LinearFunction (Scalar u) (Tensor s u (Tensor s v u)) w
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar u) (Tensor (Scalar u) u (Tensor s v u)) w
f) LinearFunction (Scalar u) (Tensor s u (Tensor s v u)) w
-> LinearFunction
     (Scalar u) (Tensor s (Tensor s u v) u) (Tensor s u (Tensor s v u))
-> LinearFunction (Scalar u) (Tensor s (Tensor s u v) u) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) u) (Tensor s u (Tensor s v u))
-> LinearFunction
     (Scalar u) (Tensor s (Tensor s u v) u) (Tensor s u (Tensor s v u))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) u) (Tensor s u (Tensor s v u))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  composeLinear :: Bilinear (w +> x) (Tensor s u v +> w) (Tensor s u v +> x)
composeLinear = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> ((w +> x)
 -> LinearMap s (Tensor s u v) w -> LinearMap s (Tensor s u v) x)
-> LinearFunction
     s
     (w +> x)
     (LinearFunction
        s (LinearMap s (Tensor s u v) w) (LinearMap s (Tensor s u v) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w +> x)
  -> LinearMap s (Tensor s u v) w -> LinearMap s (Tensor s u v) x)
 -> LinearFunction
      s
      (w +> x)
      (LinearFunction
         s (LinearMap s (Tensor s u v) w) (LinearMap s (Tensor s u v) x)))
-> ((w +> x)
    -> LinearMap s (Tensor s u v) w -> LinearMap s (Tensor s u v) x)
-> LinearFunction
     s
     (w +> x)
     (LinearFunction
        s (LinearMap s (Tensor s u v) w) (LinearMap s (Tensor s u v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w +> x
f LinearMap s (Tensor s u v) w
g
        -> Coercion
  (LinearMap s u (LinearMap s v x)) (LinearMap s (Tensor s u v) x)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap s u (LinearMap s v x)) (LinearMap s (Tensor s u v) x)
-> LinearMap s u (LinearMap s v x) -> LinearMap s (Tensor s u v) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (LinearMap s v w) (LinearMap s v x)
-> LinearFunction
     s
     (LinearMap s u (LinearMap s v w))
     (LinearMap s u (LinearMap s v x))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction (Scalar w) w x
-> LinearFunction s (LinearMap s v w) (LinearMap s v x)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction (Scalar w) w x
 -> LinearFunction s (LinearMap s v w) (LinearMap s v x))
-> LinearFunction (Scalar w) w x
-> LinearFunction s (LinearMap s v w) (LinearMap s v x)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (w +> x) (LinearFunction (Scalar w) w x)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction s (w +> x) (LinearFunction (Scalar w) w x)
-> (w +> x) -> LinearFunction (Scalar w) w x
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f) LinearFunction
  s
  (LinearMap s u (LinearMap s v w))
  (LinearMap s u (LinearMap s v x))
-> LinearMap s u (LinearMap s v w)
-> LinearMap s u (LinearMap s v x)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMapCoercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
-> LinearMap s (Tensor s u v) w -> LinearMap s u (LinearMap s v w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$LinearMap s (Tensor s u v) w
g)
  contractTensorMap :: (Tensor s u v +> (Tensor s u v ⊗ w)) -+> w
contractTensorMap = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction s (LinearMap s u (Tensor (Scalar u) u w)) w
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v +> (v ⊗ w)) -+> w
contractTensorMap
      LinearFunction s (LinearMap s u (Tensor (Scalar u) u w)) w
-> LinearFunction
     s
     (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
     (LinearMap s u (Tensor (Scalar u) u w))
-> LinearFunction
     s (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w)) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar u)
  (LinearMap s v (Tensor s (Tensor s u v) w))
  (Tensor (Scalar u) u w)
-> LinearFunction
     s
     (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
     (LinearMap s u (Tensor (Scalar u) u w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction
  (Scalar u) (Tensor (Scalar w) w u) (Tensor (Scalar u) u w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  (Scalar u) (Tensor (Scalar w) w u) (Tensor (Scalar u) u w)
-> LinearFunction
     (Scalar u)
     (LinearMap s v (Tensor s (Tensor s u v) w))
     (Tensor (Scalar w) w u)
-> LinearFunction
     (Scalar u)
     (LinearMap s v (Tensor s (Tensor s u v) w))
     (Tensor (Scalar u) u w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar u)
  (LinearMap s v (Tensor s v (Tensor s w u)))
  (Tensor (Scalar w) w u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v +> (v ⊗ w)) -+> w
contractTensorMap
                 LinearFunction
  (Scalar u)
  (LinearMap s v (Tensor s v (Tensor s w u)))
  (Tensor (Scalar w) w u)
-> LinearFunction
     (Scalar u)
     (LinearMap s v (Tensor s (Tensor s u v) w))
     (LinearMap s v (Tensor s v (Tensor s w u)))
-> LinearFunction
     (Scalar u)
     (LinearMap s v (Tensor s (Tensor s u v) w))
     (Tensor (Scalar w) w u)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (Tensor s (Tensor s u v) w) (Tensor s v (Tensor s w u))
-> LinearFunction
     (Scalar u)
     (LinearMap s v (Tensor s (Tensor s u v) w))
     (LinearMap s v (Tensor s v (Tensor s w u)))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion (Tensor s (Tensor s v w) u) (Tensor s v (Tensor s w u))
-> LinearFunction
     s (Tensor s (Tensor s v w) u) (Tensor s v (Tensor s w u))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s v w) u) (Tensor s v (Tensor s w u))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor LinearFunction
  s (Tensor s (Tensor s v w) u) (Tensor s v (Tensor s w u))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s v w) u)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s v (Tensor s w u))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s v w) u)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s (Tensor s u (Tensor s v w)) (Tensor s (Tensor s v w) u)
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s (Tensor s v w) u)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor))
                       LinearFunction
  s
  (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
  (LinearMap s u (Tensor (Scalar u) u w))
-> LinearFunction
     s
     (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
     (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
-> LinearFunction
     s
     (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
     (LinearMap s u (Tensor (Scalar u) u w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
  (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
-> LinearFunction
     s
     (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
     (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearMap s (Tensor s u v) (Tensor s (Tensor s u v) w))
  (LinearMap s u (LinearMap s v (Tensor s (Tensor s u v) w)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap
  contractMapTensor :: (Tensor s u v ⊗ (Tensor s u v +> w)) -+> w
contractMapTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
    ScalarSpaceWitness u
ScalarSpaceWitness -> LinearFunction s (LinearMap (Scalar v) v (Tensor (Scalar v) v w)) w
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v +> (v ⊗ w)) -+> w
contractTensorMap LinearFunction s (LinearMap (Scalar v) v (Tensor (Scalar v) v w)) w
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (LinearMap (Scalar v) v (Tensor (Scalar v) v w))
-> LinearFunction
     s (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w)) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar v) (Tensor (Scalar w) w v) (Tensor (Scalar v) v w)
-> LinearFunction
     s
     (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
     (LinearMap (Scalar v) v (Tensor (Scalar v) v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction
  (Scalar v) (Tensor (Scalar w) w v) (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s
  (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
  (LinearMap (Scalar v) v (Tensor (Scalar v) v w))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (LinearMap (Scalar v) v (Tensor (Scalar v) v w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s
  (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
  (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ (v +> w)) -+> w
contractMapTensor
                 LinearFunction
  s
  (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
  (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (LinearMap (Scalar v) v (Tensor (Scalar w) w v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s
  (Tensor s v (LinearMap s (Tensor s u v) w))
  (LinearMap s u (LinearMap s v (Tensor s w v)))
-> LinearFunction
     s
     (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
     (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
  (Tensor s (LinearMap s (Tensor s u v) w) v)
  (LinearMap s u (LinearMap s v (Tensor s w v)))
-> LinearFunction
     s
     (Tensor s (LinearMap s (Tensor s u v) w) v)
     (LinearMap s u (LinearMap s v (Tensor s w v)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (LinearMap s (Tensor s u v) (Tensor s w v))
  (LinearMap s u (LinearMap s v (Tensor s w v)))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap s (Tensor s u v) (Tensor s w v))
  (LinearMap s u (LinearMap s v (Tensor s w v)))
-> Coercion
     (Tensor s (LinearMap s (Tensor s u v) w) v)
     (LinearMap s (Tensor s u v) (Tensor s w v))
-> Coercion
     (Tensor s (LinearMap s (Tensor s u v) w) v)
     (LinearMap s u (LinearMap s v (Tensor s w v)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (LinearMap s (Tensor s u v) w) v)
  (LinearMap s (Tensor s u v) (Tensor s w v))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap) LinearFunction
  s
  (Tensor s (LinearMap s (Tensor s u v) w) v)
  (LinearMap s u (LinearMap s v (Tensor s w v)))
-> LinearFunction
     s
     (Tensor s v (LinearMap s (Tensor s u v) w))
     (Tensor s (LinearMap s (Tensor s u v) w) v)
-> LinearFunction
     s
     (Tensor s v (LinearMap s (Tensor s u v) w))
     (LinearMap s u (LinearMap s v (Tensor s w v)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s
  (Tensor s v (LinearMap s (Tensor s u v) w))
  (Tensor s (LinearMap s (Tensor s u v) w) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor)
                       LinearFunction
  s
  (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
  (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (Tensor s u (LinearMap s u (LinearMap s v (Tensor s w v))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
  (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
-> LinearFunction
     s
     (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
     (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (Tensor s u v) (LinearMap s (Tensor s u v) w))
  (Tensor s u (Tensor s v (LinearMap s (Tensor s u v) w)))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError



type DualSpace v = v+>Scalar v

type Fractional' s = (Num' s, Fractional s, Eq s, VectorSpace s)



instance (TensorSpace v, Num' s, Scalar v ~ s)
            => Functor (Tensor s v) (LinearFunction s) (LinearFunction s) where
  fmap :: LinearFunction s a b
-> LinearFunction s (Tensor s v a) (Tensor s v b)
fmap LinearFunction s a b
f = LinearFunction
  s
  (LinearFunction s a b)
  (LinearFunction s (Tensor s v a) (Tensor s v b))
-> LinearFunction s a b
-> LinearFunction s (Tensor s v a) (Tensor s v b)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  s
  (LinearFunction s a b)
  (LinearFunction s (Tensor s v a) (Tensor s v b))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensor LinearFunction s a b
f
instance (Num' s, TensorSpace v, Scalar v ~ s)
            => Monoidal (Tensor s v) (LinearFunction s) (LinearFunction s) where
  pureUnit :: LinearFunction
  s
  (UnitObject (LinearFunction s))
  (Tensor s v (UnitObject (LinearFunction s)))
pureUnit = LinearFunction
  s
  (UnitObject (LinearFunction s))
  (Tensor s v (UnitObject (LinearFunction s)))
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  fzipWith :: LinearFunction s (a, b) c
-> LinearFunction s (Tensor s v a, Tensor s v b) (Tensor s v c)
fzipWith LinearFunction s (a, b) c
f = LinearFunction
  s
  (LinearFunction s (a, b) c)
  (LinearFunction s (Tensor s v a, Tensor s v b) (Tensor s v c))
-> LinearFunction s (a, b) c
-> LinearFunction s (Tensor s v a, Tensor s v b) (Tensor s v c)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  s
  (LinearFunction s (a, b) c)
  (LinearFunction s (Tensor s v a, Tensor s v b) (Tensor s v c))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWith LinearFunction s (a, b) c
f

instance (LinearSpace v, Num' s, Scalar v ~ s)
            => Functor (LinearMap s v) (LinearFunction s) (LinearFunction s) where
  fmap :: LinearFunction s a b
-> LinearFunction s (LinearMap s v a) (LinearMap s v b)
fmap = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
    DualSpaceWitness v
DualSpaceWitness -> \LinearFunction s a b
f -> Coercion (Tensor s (DualVector v) b) (LinearMap s v b)
-> LinearFunction s (Tensor s (DualVector v) b) (LinearMap s v b)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (DualVector v) b) (LinearMap s v b)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor LinearFunction s (Tensor s (DualVector v) b) (LinearMap s v b)
-> LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) b)
-> LinearFunction s (LinearMap s v a) (LinearMap s v b)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s a b
-> LinearFunction
     s (Tensor s (DualVector v) a) (Tensor s (DualVector v) b)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction s a b
f LinearFunction
  s (Tensor s (DualVector v) a) (Tensor s (DualVector v) b)
-> LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) a)
-> LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) b)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (LinearMap s v a) (Tensor s (DualVector v) a)
-> LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) a)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (LinearMap s v a) (Tensor s (DualVector v) a)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor
instance (Num' s, LinearSpace v, Scalar v ~ s)
            => Monoidal (LinearMap s v) (LinearFunction s) (LinearFunction s) where
  pureUnit :: LinearFunction
  s
  (UnitObject (LinearFunction s))
  (LinearMap s v (UnitObject (LinearFunction s)))
pureUnit = LinearFunction
  s
  (UnitObject (LinearFunction s))
  (LinearMap s v (UnitObject (LinearFunction s)))
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  fzipWith :: LinearFunction s (a, b) c
-> LinearFunction
     s (LinearMap s v a, LinearMap s v b) (LinearMap s v c)
fzipWith = case DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v of
    DualSpaceWitness v
DualSpaceWitness -> \LinearFunction s (a, b) c
f -> Coercion (LinearMap s v a) (Tensor s (DualVector v) a)
-> LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) a)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (LinearMap s v a) (Tensor s (DualVector v) a)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor LinearFunction s (LinearMap s v a) (Tensor s (DualVector v) a)
-> LinearFunction s (LinearMap s v b) (Tensor s (DualVector v) b)
-> LinearFunction
     s
     (LinearMap s v a, LinearMap s v b)
     (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
*** Coercion (LinearMap s v b) (Tensor s (DualVector v) b)
-> LinearFunction s (LinearMap s v b) (Tensor s (DualVector v) b)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (LinearMap s v b) (Tensor s (DualVector v) b)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor LinearFunction
  s
  (LinearMap s v a, LinearMap s v b)
  (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
-> LinearFunction
     s
     (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
     (LinearMap s v c)
-> LinearFunction
     s (LinearMap s v a, LinearMap s v b) (LinearMap s v c)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction s (a, b) c
-> LinearFunction
     s
     (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
     (Tensor s (DualVector v) c)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b c.
(Monoidal f r t, ObjectPair r a b, Object r c,
 ObjectPair t (f a) (f b), Object t (f c)) =>
r (a, b) c -> t (f a, f b) (f c)
fzipWith LinearFunction s (a, b) c
f LinearFunction
  s
  (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
  (Tensor s (DualVector v) c)
-> LinearFunction s (Tensor s (DualVector v) c) (LinearMap s v c)
-> LinearFunction
     s
     (Tensor s (DualVector v) a, Tensor s (DualVector v) b)
     (LinearMap s v c)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion (Tensor s (DualVector v) c) (LinearMap s v c)
-> LinearFunction s (Tensor s (DualVector v) c) (LinearMap s v c)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion (Tensor s (DualVector v) c) (LinearMap s v c)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor

instance (TensorSpace v, Scalar v ~ s)
            => Functor (Tensor s v) Coercion Coercion where
  fmap :: Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
fmap = Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
forall s v a b.
(TensorSpace v, Scalar v ~ s) =>
Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
crcFmap
   where crcFmap ::  s v a b . (TensorSpace v, Scalar v ~ s)
              => Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
         crcFmap :: Coercion a b -> Coercion (Tensor s v a) (Tensor s v b)
crcFmap Coercion a b
f = case [v]
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[v]) Coercion a b
f of
                       Coercion (TensorProduct v a) (TensorProduct v b)
Coercion -> Coercion (Tensor s v a) (Tensor s v b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance (LinearSpace v, Scalar v ~ s)
            => Functor (LinearMap s v) Coercion Coercion where
  fmap :: Coercion a b -> Coercion (LinearMap s v a) (LinearMap s v b)
fmap = DualSpaceWitness v
-> Coercion a b -> Coercion (LinearMap s v a) (LinearMap s v b)
forall s v a b.
(LinearSpace v, Scalar v ~ s) =>
DualSpaceWitness v
-> Coercion a b -> Coercion (LinearMap s v a) (LinearMap s v b)
crcFmap DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where crcFmap ::  s v a b . (LinearSpace v, Scalar v ~ s)
              => DualSpaceWitness v -> Coercion a b
                            -> Coercion (LinearMap s v a) (LinearMap s v b)
         crcFmap :: DualSpaceWitness v
-> Coercion a b -> Coercion (LinearMap s v a) (LinearMap s v b)
crcFmap DualSpaceWitness v
DualSpaceWitness Coercion a b
f
             = case [DualVector v]
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector v) a) (TensorProduct (DualVector v) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[DualVector v]) Coercion a b
f of
                       Coercion
  (TensorProduct (DualVector v) a) (TensorProduct (DualVector v) b)
Coercion -> Coercion (LinearMap s v a) (LinearMap s v b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance Category (LinearFunction s) where
  type Object (LinearFunction s) v = (TensorSpace v, Scalar v ~ s)
  id :: LinearFunction s a a
id = (a -> a) -> LinearFunction s a a
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction a -> a
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  LinearFunction b -> c
f . :: LinearFunction s b c
-> LinearFunction s a b -> LinearFunction s a c
. LinearFunction a -> b
g = (a -> c) -> LinearFunction s a c
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((a -> c) -> LinearFunction s a c)
-> (a -> c) -> LinearFunction s a c
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ b -> c
f(b -> c) -> (a -> b) -> a -> c
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.a -> b
g
instance Num' s => Cartesian (LinearFunction s) where
  type UnitObject (LinearFunction s) = ZeroDim s
  swap :: LinearFunction s (a, b) (b, a)
swap = ((a, b) -> (b, a)) -> LinearFunction s (a, b) (b, a)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (a, b) -> (b, a)
forall (k :: * -> * -> *) a b.
(Cartesian k, ObjectPair k a b, ObjectPair k b a) =>
k (a, b) (b, a)
swap
  attachUnit :: LinearFunction s a (a, unit)
attachUnit = (a -> (a, ZeroDim s)) -> LinearFunction s a (a, ZeroDim s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (, ZeroDim s
forall s. ZeroDim s
Origin)
  detachUnit :: LinearFunction s (a, unit) a
detachUnit = ((a, unit) -> a) -> LinearFunction s (a, unit) a
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (a, unit) -> a
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) x
fst
  regroup :: LinearFunction s (a, (b, c)) ((a, b), c)
regroup = ((a, (b, c)) -> ((a, b), c))
-> LinearFunction s (a, (b, c)) ((a, b), c)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (a, (b, c)) -> ((a, b), c)
forall (k :: * -> * -> *) a b c.
(Cartesian k, ObjectPair k a b, ObjectPair k b c,
 ObjectPair k a (b, c), ObjectPair k (a, b) c) =>
k (a, (b, c)) ((a, b), c)
regroup
  regroup' :: LinearFunction s ((a, b), c) (a, (b, c))
regroup' = (((a, b), c) -> (a, (b, c)))
-> LinearFunction s ((a, b), c) (a, (b, c))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((a, b), c) -> (a, (b, c))
forall (k :: * -> * -> *) a b c.
(Cartesian k, ObjectPair k a b, ObjectPair k b c,
 ObjectPair k a (b, c), ObjectPair k (a, b) c) =>
k ((a, b), c) (a, (b, c))
regroup'
instance Num' s => Morphism (LinearFunction s) where
  LinearFunction b -> c
f*** :: LinearFunction s b c
-> LinearFunction s b' c' -> LinearFunction s (b, b') (c, c')
***LinearFunction b' -> c'
g = ((b, b') -> (c, c')) -> LinearFunction s (b, b') (c, c')
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((b, b') -> (c, c')) -> LinearFunction s (b, b') (c, c'))
-> ((b, b') -> (c, c')) -> LinearFunction s (b, b') (c, c')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ b -> c
f(b -> c) -> (b' -> c') -> (b, b') -> (c, c')
forall (a :: * -> * -> *) b b' c c'.
(Morphism a, ObjectPair a b b', ObjectPair a c c') =>
a b c -> a b' c' -> a (b, b') (c, c')
***b' -> c'
g
instance Num' s => PreArrow (LinearFunction s) where
  LinearFunction b -> c
f&&& :: LinearFunction s b c
-> LinearFunction s b c' -> LinearFunction s b (c, c')
&&&LinearFunction b -> c'
g = (b -> (c, c')) -> LinearFunction s b (c, c')
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((b -> (c, c')) -> LinearFunction s b (c, c'))
-> (b -> (c, c')) -> LinearFunction s b (c, c')
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ b -> c
f(b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&b -> c'
g
  fst :: LinearFunction s (x, y) x
fst = ((x, y) -> x) -> LinearFunction s (x, y) x
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (x, y) -> x
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) x
fst; snd :: LinearFunction s (x, y) y
snd = ((x, y) -> y) -> LinearFunction s (x, y) y
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (x, y) -> y
forall (a :: * -> * -> *) x y.
(PreArrow a, ObjectPair a x y) =>
a (x, y) y
snd
  terminal :: LinearFunction s b (UnitObject (LinearFunction s))
terminal = LinearFunction s b (UnitObject (LinearFunction s))
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
instance EnhancedCat (->) (LinearFunction s) where
  arr :: LinearFunction s b c -> b -> c
arr = LinearFunction s b c -> b -> c
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction
instance EnhancedCat (LinearFunction s) Coercion where
  arr :: Coercion b c -> LinearFunction s b c
arr = (b -> c) -> LinearFunction s b c
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((b -> c) -> LinearFunction s b c)
-> (Coercion b c -> b -> c) -> Coercion b c -> LinearFunction s b c
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion b c -> b -> c
forall a b. Coercion a b -> a -> b
coerceWith

instance (LinearSpace w, Num' s, Scalar w ~ s)
     => Functor (LinearFunction s w) (LinearFunction s) (LinearFunction s) where
  fmap :: LinearFunction s a b
-> LinearFunction s (LinearFunction s w a) (LinearFunction s w b)
fmap LinearFunction s a b
f = (LinearFunction s w a -> LinearFunction s w b)
-> LinearFunction s (LinearFunction s w a) (LinearFunction s w b)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (LinearFunction s a b
fLinearFunction s a b
-> LinearFunction s w a -> LinearFunction s w b
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.)


sampleLinearFunctionFn :: ( LinearSpace u, LinearSpace v, TensorSpace w
                          , Scalar u ~ Scalar v, Scalar v ~ Scalar w)
                           => ((u-+>v)-+>w) -+> ((u+>v)+>w)
sampleLinearFunctionFn :: ((u -+> v) -+> w) -+> ((u +> v) +> w)
sampleLinearFunctionFn = (LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
 -> LinearMap (Scalar w) (u +> v) w)
-> LinearFunction
     (Scalar w)
     (LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w)
     (LinearMap (Scalar w) (u +> v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
  -> LinearMap (Scalar w) (u +> v) w)
 -> LinearFunction
      (Scalar w)
      (LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w)
      (LinearMap (Scalar w) (u +> v) w))
-> (LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
    -> LinearMap (Scalar w) (u +> v) w)
-> LinearFunction
     (Scalar w)
     (LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w)
     (LinearMap (Scalar w) (u +> v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                \LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
f -> LinearFunction
  (Scalar w)
  (LinearFunction (Scalar w) (u +> v) w)
  (LinearMap (Scalar w) (u +> v) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar w)
  (LinearFunction (Scalar w) (u +> v) w)
  (LinearMap (Scalar w) (u +> v) w)
-> LinearFunction (Scalar w) (u +> v) w
-> LinearMap (Scalar w) (u +> v) w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
f LinearFunction (Scalar w) (LinearFunction (Scalar u) u v) w
-> LinearFunction
     (Scalar w) (u +> v) (LinearFunction (Scalar u) u v)
-> LinearFunction (Scalar w) (u +> v) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar w) (u +> v) (LinearFunction (Scalar u) u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear

fromLinearFn :: Coercion (LinearFunction s (LinearFunction s u v) w)
                         (Tensor s (LinearFunction s v u) w)
fromLinearFn :: Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn = Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

asLinearFn :: Coercion (Tensor s (LinearFunction s u v) w)
                       (LinearFunction s (LinearFunction s v u) w)
asLinearFn :: Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn = Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion


instance  s u v . (LinearSpace u, LinearSpace v, Scalar u ~ s, Scalar v ~ s)
     => TensorSpace (LinearFunction s u v) where
  type TensorProduct (LinearFunction s u v) w = LinearFunction s (LinearFunction s v u) w
  scalarSpaceWitness :: ScalarSpaceWitness (LinearFunction s u v)
scalarSpaceWitness = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                            , ScalarSpaceWitness v
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness v ) of
       (ScalarSpaceWitness u
ScalarSpaceWitness, ScalarSpaceWitness v
ScalarSpaceWitness) -> ScalarSpaceWitness (LinearFunction s u v)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (LinearFunction s u v)
linearManifoldWitness = case ( LinearManifoldWitness u
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness u
                             , LinearManifoldWitness v
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness v ) of
       ( LinearManifoldWitness u
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
          BoundarylessWitness
#endif
        ,LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
          BoundarylessWitness
#endif
        )
         -> LinearManifoldWitness (LinearFunction s u v)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
             BoundarylessWitness
#endif
  zeroTensor :: LinearFunction s u v ⊗ w
zeroTensor = Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (LinearFunction s v u) w
forall w s v. AdditiveGroup w => LinearFunction s v w
const0
  toFlatTensor :: LinearFunction s u v
-+> (LinearFunction s u v ⊗ Scalar (LinearFunction s u v))
toFlatTensor = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> Coercion
  (LinearFunction s (LinearFunction s v u) s)
  (Tensor s (LinearFunction s u v) s)
-> Coercion
     (LinearFunction
        s
        (LinearFunction s u v)
        (LinearFunction s (LinearFunction s v u) s))
     (LinearFunction
        s (LinearFunction s u v) (Tensor s (LinearFunction s u v) s))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearFunction s (LinearFunction s v u) s)
  (Tensor s (LinearFunction s u v) s)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction
     s
     (LinearFunction s u v)
     (LinearFunction s (LinearFunction s v u) s))
  (LinearFunction
     s (LinearFunction s u v) (Tensor s (LinearFunction s u v) s))
-> LinearFunction
     s
     (LinearFunction s u v)
     (LinearFunction s (LinearFunction s v u) s)
-> LinearFunction
     s (LinearFunction s u v) (Tensor s (LinearFunction s u v) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (LinearFunction s u v)
  (LinearFunction s (LinearFunction s v u) s)
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVector
  fromFlatTensor :: (LinearFunction s u v ⊗ Scalar (LinearFunction s u v))
-+> LinearFunction s u v
fromFlatTensor = case ( ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u
                        , DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u ) of
     (ScalarSpaceWitness u
ScalarSpaceWitness, DualSpaceWitness u
DualSpaceWitness)
            -> Coercion
  (Tensor s (LinearFunction s u v) s)
  (LinearFunction s (LinearFunction s v u) s)
-> LinearFunction
     s
     (Tensor s (LinearFunction s u v) s)
     (LinearFunction s (LinearFunction s v u) s)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearFunction s u v) s)
  (LinearFunction s (LinearFunction s v u) s)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn LinearFunction
  s
  (Tensor s (LinearFunction s u v) s)
  (LinearFunction s (LinearFunction s v u) s)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s v u) s)
     (LinearFunction s u v)
-> LinearFunction
     s (Tensor s (LinearFunction s u v) s) (LinearFunction s u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearFunction s (LinearFunction s v u) s -> LinearFunction s u v)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s v u) s)
     (LinearFunction s u v)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction((LinearFunction s (LinearFunction s v u) s
  -> LinearFunction s u v)
 -> LinearFunction
      s
      (LinearFunction s (LinearFunction s v u) s)
      (LinearFunction s u v))
-> (LinearFunction s (LinearFunction s v u) s
    -> LinearFunction s u v)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s v u) s)
     (LinearFunction s u v)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`
                     \LinearFunction s (LinearFunction s v u) s
f -> let t :: Tensor (Scalar (DualVector u)) (DualVector u) v
t = LinearFunction
  s
  (Tensor (Scalar v) v (DualVector u))
  (Tensor (Scalar (DualVector u)) (DualVector u) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s
  (Tensor (Scalar v) v (DualVector u))
  (Tensor (Scalar (DualVector u)) (DualVector u) v)
-> LinearFunction
     s
     (Tensor s v (LinearMap s u s))
     (Tensor (Scalar v) v (DualVector u))
-> LinearFunction
     s
     (Tensor s v (LinearMap s u s))
     (Tensor (Scalar (DualVector u)) (DualVector u) v)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (LinearFunction
  s
  (LinearFunction
     (Scalar (DualVector u)) (LinearMap s u s) (DualVector u))
  (LinearFunction
     s
     (Tensor s v (LinearMap s u s))
     (Tensor (Scalar v) v (DualVector u)))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  s
  (LinearFunction
     (Scalar (DualVector u)) (LinearMap s u s) (DualVector u))
  (LinearFunction
     s
     (Tensor s v (LinearMap s u s))
     (Tensor (Scalar v) v (DualVector u)))
-> LinearFunction
     (Scalar (DualVector u)) (LinearMap s u s) (DualVector u)
-> LinearFunction
     s
     (Tensor s v (LinearMap s u s))
     (Tensor (Scalar v) v (DualVector u))
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction
  (Scalar (DualVector u)) (LinearMap s u s) (DualVector u)
forall v. LinearSpace v => (v +> Scalar v) -+> DualVector v
fromLinearForm)
                                 LinearFunction
  s
  (Tensor s v (LinearMap s u s))
  (Tensor (Scalar (DualVector u)) (DualVector u) v)
-> Tensor s v (LinearMap s u s)
-> Tensor (Scalar (DualVector u)) (DualVector u) v
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s (LinearMap s v u) s) (Tensor s v (LinearMap s u s))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap
                                  Coercion
  (LinearMap s (LinearMap s v u) s) (Tensor s v (LinearMap s u s))
-> LinearMap s (LinearMap s v u) s -> Tensor s v (LinearMap s u s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (LinearFunction s (LinearMap s v u) s)
  (LinearMap s (LinearMap s v u) s)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunctionLinearFunction
  s
  (LinearFunction s (LinearMap s v u) s)
  (LinearMap s (LinearMap s v u) s)
-> LinearFunction s (LinearMap s v u) s
-> LinearMap s (LinearMap s v u) s
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction s (LinearFunction s v u) s
f LinearFunction s (LinearFunction s v u) s
-> LinearFunction s (LinearMap s v u) (LinearFunction s v u)
-> LinearFunction s (LinearMap s v u) s
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s (LinearMap s v u) (LinearFunction s v u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear
                           in LinearFunction (Scalar u) (LinearMap s u v) (LinearFunction s u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearFunction (Scalar u) (LinearMap s u v) (LinearFunction s u v)
-> LinearMap s u v -> LinearFunction s u v
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor (Scalar (DualVector u)) (DualVector u) v) (LinearMap s u v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector u)) (DualVector u) v) (LinearMap s u v)
-> Tensor (Scalar (DualVector u)) (DualVector u) v
-> LinearMap s u v
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector u)) (DualVector u) v
t
  addTensors :: (LinearFunction s u v ⊗ w)
-> (LinearFunction s u v ⊗ w) -> LinearFunction s u v ⊗ w
addTensors LinearFunction s u v ⊗ w
t LinearFunction s u v ⊗ w
s = Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) w
LinearFunction s u v ⊗ w
t)LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
forall v. AdditiveGroup v => v -> v -> v
^+^(Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) w
LinearFunction s u v ⊗ w
s)
  subtractTensors :: (LinearFunction s u v ⊗ w)
-> (LinearFunction s u v ⊗ w) -> LinearFunction s u v ⊗ w
subtractTensors LinearFunction s u v ⊗ w
t LinearFunction s u v ⊗ w
s = Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) w
LinearFunction s u v ⊗ w
t)LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
forall v. AdditiveGroup v => v -> v -> v
^-^(Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) w
LinearFunction s u v ⊗ w
s)
  scaleTensor :: Bilinear
  (Scalar (LinearFunction s u v))
  (LinearFunction s u v ⊗ w)
  (LinearFunction s u v ⊗ w)
scaleTensor = (s
 -> Tensor s (LinearFunction s u v) w
 -> Tensor s (LinearFunction s u v) w)
-> Bilinear
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((s
  -> Tensor s (LinearFunction s u v) w
  -> Tensor s (LinearFunction s u v) w)
 -> Bilinear
      s
      (Tensor s (LinearFunction s u v) w)
      (Tensor s (LinearFunction s u v) w))
-> (s
    -> Tensor s (LinearFunction s u v) w
    -> Tensor s (LinearFunction s u v) w)
-> Bilinear
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \s
μ (Tensor TensorProduct (LinearFunction s u v) w
f) -> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction s (LinearFunction s v u) w
 -> Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ s
Scalar (LinearFunction s (LinearFunction s v u) w)
μ Scalar (LinearFunction s (LinearFunction s v u) w)
-> LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
forall v. VectorSpace v => Scalar v -> v -> v
*^ LinearFunction s (LinearFunction s v u) w
TensorProduct (LinearFunction s u v) w
f
  negateTensor :: (LinearFunction s u v ⊗ w) -+> (LinearFunction s u v ⊗ w)
negateTensor = (Tensor s (LinearFunction s u v) w
 -> Tensor s (LinearFunction s u v) w)
-> LinearFunction
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor s (LinearFunction s u v) w
  -> Tensor s (LinearFunction s u v) w)
 -> LinearFunction
      s
      (Tensor s (LinearFunction s u v) w)
      (Tensor s (LinearFunction s u v) w))
-> (Tensor s (LinearFunction s u v) w
    -> Tensor s (LinearFunction s u v) w)
-> LinearFunction
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor TensorProduct (LinearFunction s u v) w
f) -> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction s (LinearFunction s v u) w
 -> Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) w
forall v. AdditiveGroup v => v -> v
negateV LinearFunction s (LinearFunction s v u) w
TensorProduct (LinearFunction s u v) w
f
  tensorProduct :: Bilinear (LinearFunction s u v) w (LinearFunction s u v ⊗ w)
tensorProduct = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
        ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s u v -> w -> Tensor s (LinearFunction s u v) w)
-> LinearFunction
     (Scalar v)
     (LinearFunction s u v)
     (LinearFunction (Scalar v) w (Tensor s (LinearFunction s u v) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearFunction s u v -> w -> Tensor s (LinearFunction s u v) w)
 -> LinearFunction
      (Scalar v)
      (LinearFunction s u v)
      (LinearFunction (Scalar v) w (Tensor s (LinearFunction s u v) w)))
-> (LinearFunction s u v -> w -> Tensor s (LinearFunction s u v) w)
-> LinearFunction
     (Scalar v)
     (LinearFunction s u v)
     (LinearFunction (Scalar v) w (Tensor s (LinearFunction s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s u v
uv w
w -> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction s (LinearFunction s v u) w
 -> Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                     (LinearFunction
  s
  (LinearFunction s u v)
  (LinearFunction s (LinearFunction s v u) s)
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  s
  (LinearFunction s u v)
  (LinearFunction s (LinearFunction s v u) s)
-> LinearFunction s u v
-> LinearFunction s (LinearFunction s v u) s
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction s u v
uv) LinearFunction s (LinearFunction s v u) s
-> LinearFunction s s w
-> LinearFunction s (LinearFunction s v u) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> w -> LinearFunction s s w
forall v s.
(VectorSpace v, Scalar v ~ s) =>
v -> LinearFunction s s v
scaleV w
w
  transposeTensor :: (LinearFunction s u v ⊗ w) -+> (w ⊗ LinearFunction s u v)
transposeTensor = ScalarSpaceWitness u
-> DualSpaceWitness u
-> Tensor s (LinearFunction s u v) w
   -+> Tensor s w (LinearFunction s u v)
forall w.
(TensorSpace w, Scalar w ~ s) =>
ScalarSpaceWitness u
-> DualSpaceWitness u
-> Tensor s (LinearFunction s u v) w
   -+> Tensor s w (LinearFunction s u v)
tt ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where tt ::  w . (TensorSpace w, Scalar w ~ s)
                   => ScalarSpaceWitness u -> DualSpaceWitness u
                        -> Tensor s (LinearFunction s u v) w
                           -+> Tensor s w (LinearFunction s u v)
         tt :: ScalarSpaceWitness u
-> DualSpaceWitness u
-> Tensor s (LinearFunction s u v) w
   -+> Tensor s w (LinearFunction s u v)
tt ScalarSpaceWitness u
ScalarSpaceWitness DualSpaceWitness u
DualSpaceWitness
           = (Tensor s (LinearFunction s u v) w
 -> Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
-> LinearFunction
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor s (LinearFunction s u v) w
  -> Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
 -> LinearFunction
      s
      (Tensor s (LinearFunction s u v) w)
      (Tensor (Scalar w) w (LinearFunction (Scalar u) u v)))
-> (Tensor s (LinearFunction s u v) w
    -> Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
-> LinearFunction
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn (Tensor s (LinearFunction s u v) w
 -> LinearFunction s (LinearFunction s v u) w)
-> (LinearFunction s (LinearFunction s v u) w
    -> Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
-> Tensor s (LinearFunction s u v) w
-> Tensor (Scalar w) w (LinearFunction (Scalar u) u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> \LinearFunction (Scalar w) (LinearFunction (Scalar u) v u) w
f
               -> (LinearFunction
  s
  (LinearFunction
     (Scalar v) (LinearMap s u v) (LinearFunction (Scalar u) u v))
  (LinearFunction
     s
     (Tensor s w (LinearMap s u v))
     (Tensor (Scalar w) w (LinearFunction (Scalar u) u v)))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  s
  (LinearFunction
     (Scalar v) (LinearMap s u v) (LinearFunction (Scalar u) u v))
  (LinearFunction
     s
     (Tensor s w (LinearMap s u v))
     (Tensor (Scalar w) w (LinearFunction (Scalar u) u v)))
-> LinearFunction
     (Scalar v) (LinearMap s u v) (LinearFunction (Scalar u) u v)
-> LinearFunction
     s
     (Tensor s w (LinearMap s u v))
     (Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction
  (Scalar v) (LinearMap s u v) (LinearFunction (Scalar u) u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear)
                          LinearFunction
  s
  (Tensor s w (LinearMap s u v))
  (Tensor (Scalar w) w (LinearFunction (Scalar u) u v))
-> Tensor s w (LinearMap s u v)
-> Tensor (Scalar w) w (LinearFunction (Scalar u) u v)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
-> Coercion
     (Tensor s w (Tensor s (DualVector u) v))
     (Tensor s w (LinearMap s u v))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion (Tensor s (DualVector u) v) (LinearMap s u v)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor s w (Tensor s (DualVector u) v))
  (Tensor s w (LinearMap s u v))
-> Coercion
     (Tensor s (Tensor s w (DualVector u)) v)
     (Tensor s w (Tensor s (DualVector u) v))
-> Coercion
     (Tensor s (Tensor s w (DualVector u)) v)
     (Tensor s w (LinearMap s u v))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (Tensor s w (DualVector u)) v)
  (Tensor s w (Tensor s (DualVector u) v))
forall s u v w.
Coercion (Tensor s (Tensor s u v) w) (Tensor s u (Tensor s v w))
rassocTensor
                           Coercion
  (Tensor s (Tensor s w (DualVector u)) v)
  (Tensor s w (LinearMap s u v))
-> Tensor s (Tensor s w (DualVector u)) v
-> Tensor s w (LinearMap s u v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (Tensor s v (Tensor s w (DualVector u)))
  (Tensor s (Tensor s w (DualVector u)) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor LinearFunction
  s
  (Tensor s v (Tensor s w (DualVector u)))
  (Tensor s (Tensor s w (DualVector u)) v)
-> LinearFunction
     s
     (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
     (Tensor s v (Tensor s w (DualVector u)))
-> LinearFunction
     s
     (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
     (Tensor s (Tensor s w (DualVector u)) v)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar w)
  (Tensor (Scalar (DualVector u)) (DualVector u) w)
  (Tensor s w (DualVector u))
-> LinearFunction
     s
     (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
     (Tensor s v (Tensor s w (DualVector u)))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction
  (Scalar w)
  (Tensor (Scalar (DualVector u)) (DualVector u) w)
  (Tensor s w (DualVector u))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                          LinearFunction
  s
  (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
  (Tensor s (Tensor s w (DualVector u)) v)
-> Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w)
-> Tensor s (Tensor s w (DualVector u)) v
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s u w) (Tensor (Scalar (DualVector u)) (DualVector u) w)
-> Coercion
     (Tensor s v (LinearMap s u w))
     (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (LinearMap s u w) (Tensor (Scalar (DualVector u)) (DualVector u) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (Tensor s v (LinearMap s u w))
  (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
-> Coercion
     (LinearMap s (LinearMap s v u) w) (Tensor s v (LinearMap s u w))
-> Coercion
     (LinearMap s (LinearMap s v u) w)
     (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (LinearMap s v u) w) (Tensor s v (LinearMap s u w))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap
                            Coercion
  (LinearMap s (LinearMap s v u) w)
  (Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w))
-> LinearMap s (LinearMap s v u) w
-> Tensor s v (Tensor (Scalar (DualVector u)) (DualVector u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (LinearFunction (Scalar w) (LinearFunction (Scalar u) v u) w)
  (LinearMap s (LinearMap s v u) w)
forall u v w.
(LinearSpace u, LinearSpace v, TensorSpace w, Scalar u ~ Scalar v,
 Scalar v ~ Scalar w) =>
((u -+> v) -+> w) -+> ((u +> v) +> w)
sampleLinearFunctionFn LinearFunction
  s
  (LinearFunction (Scalar w) (LinearFunction (Scalar u) v u) w)
  (LinearMap s (LinearMap s v u) w)
-> LinearFunction (Scalar w) (LinearFunction (Scalar u) v u) w
-> LinearMap s (LinearMap s v u) w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction (Scalar w) (LinearFunction (Scalar u) v u) w
f
  fmapTensor :: Bilinear
  (w -+> x) (LinearFunction s u v ⊗ w) (LinearFunction s u v ⊗ x)
fmapTensor = (LinearFunction s w x
 -> Tensor s (LinearFunction s u v) w
 -> Tensor s (LinearFunction s u v) x)
-> LinearFunction
     (Scalar x)
     (LinearFunction s w x)
     (LinearFunction
        (Scalar x)
        (Tensor s (LinearFunction s u v) w)
        (Tensor s (LinearFunction s u v) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearFunction s w x
  -> Tensor s (LinearFunction s u v) w
  -> Tensor s (LinearFunction s u v) x)
 -> LinearFunction
      (Scalar x)
      (LinearFunction s w x)
      (LinearFunction
         (Scalar x)
         (Tensor s (LinearFunction s u v) w)
         (Tensor s (LinearFunction s u v) x)))
-> (LinearFunction s w x
    -> Tensor s (LinearFunction s u v) w
    -> Tensor s (LinearFunction s u v) x)
-> LinearFunction
     (Scalar x)
     (LinearFunction s w x)
     (LinearFunction
        (Scalar x)
        (Tensor s (LinearFunction s u v) w)
        (Tensor s (LinearFunction s u v) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s w x
f -> Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn
                 (Tensor s (LinearFunction s u v) w
 -> LinearFunction s (LinearFunction s v u) w)
-> (LinearFunction s (LinearFunction s v u) w
    -> Tensor s (LinearFunction s u v) x)
-> Tensor s (LinearFunction s u v) w
-> Tensor s (LinearFunction s u v) x
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> \LinearFunction s (LinearFunction s v u) w
g -> Coercion
  (LinearFunction s (LinearFunction s v u) x)
  (Tensor s (LinearFunction s u v) x)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction s (LinearFunction s v u) x)
  (Tensor s (LinearFunction s u v) x)
-> LinearFunction s (LinearFunction s v u) x
-> Tensor s (LinearFunction s u v) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s w x
f LinearFunction s w x
-> LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) x
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s (LinearFunction s v u) w
g
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (LinearFunction s u v ⊗ w, LinearFunction s u v ⊗ x)
  (LinearFunction s u v ⊗ u)
fzipTensorWith = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
     ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction s (w, x) u
 -> (Tensor s (LinearFunction s u v) w,
     Tensor s (LinearFunction s u v) x)
 -> Tensor s (LinearFunction s u v) u)
-> LinearFunction
     (Scalar u)
     (LinearFunction s (w, x) u)
     (LinearFunction
        (Scalar u)
        (Tensor s (LinearFunction s u v) w,
         Tensor s (LinearFunction s u v) x)
        (Tensor s (LinearFunction s u v) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearFunction s (w, x) u
  -> (Tensor s (LinearFunction s u v) w,
      Tensor s (LinearFunction s u v) x)
  -> Tensor s (LinearFunction s u v) u)
 -> LinearFunction
      (Scalar u)
      (LinearFunction s (w, x) u)
      (LinearFunction
         (Scalar u)
         (Tensor s (LinearFunction s u v) w,
          Tensor s (LinearFunction s u v) x)
         (Tensor s (LinearFunction s u v) u)))
-> (LinearFunction s (w, x) u
    -> (Tensor s (LinearFunction s u v) w,
        Tensor s (LinearFunction s u v) x)
    -> Tensor s (LinearFunction s u v) u)
-> LinearFunction
     (Scalar u)
     (LinearFunction s (w, x) u)
     (LinearFunction
        (Scalar u)
        (Tensor s (LinearFunction s u v) w,
         Tensor s (LinearFunction s u v) x)
        (Tensor s (LinearFunction s u v) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s (w, x) u
f (Tensor s (LinearFunction s u v) w
g,Tensor s (LinearFunction s u v) x
h)
                    -> Coercion
  (LinearFunction s (LinearFunction s v u) u)
  (Tensor s (LinearFunction s u v) u)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn Coercion
  (LinearFunction s (LinearFunction s v u) u)
  (Tensor s (LinearFunction s u v) u)
-> LinearFunction s (LinearFunction s v u) u
-> Tensor s (LinearFunction s u v) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (w, x) u
f LinearFunction s (w, x) u
-> LinearFunction s (LinearFunction s v u) (w, x)
-> LinearFunction s (LinearFunction s v u) u
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. ((Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) w
g)LinearFunction s (LinearFunction s v u) w
-> LinearFunction s (LinearFunction s v u) x
-> LinearFunction s (LinearFunction s v u) (w, x)
forall (a :: * -> * -> *) b c c'.
(PreArrow a, Object a b, ObjectPair a c c') =>
a b c -> a b c' -> a b (c, c')
&&&(Coercion
  (Tensor s (LinearFunction s u v) x)
  (LinearFunction s (LinearFunction s v u) x)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFnCoercion
  (Tensor s (LinearFunction s u v) x)
  (LinearFunction s (LinearFunction s v u) x)
-> Tensor s (LinearFunction s u v) x
-> LinearFunction s (LinearFunction s v u) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$Tensor s (LinearFunction s u v) x
h))
  coerceFmapTensorProduct :: p (LinearFunction s u v)
-> Coercion a b
-> Coercion
     (TensorProduct (LinearFunction s u v) a)
     (TensorProduct (LinearFunction s u v) b)
coerceFmapTensorProduct p (LinearFunction s u v)
_ Coercion a b
Coercion = Coercion
  (TensorProduct (LinearFunction s u v) a)
  (TensorProduct (LinearFunction s u v) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  wellDefinedVector :: LinearFunction s u v -> Maybe (LinearFunction s u v)
wellDefinedVector = LinearFunction
  (Scalar u)
  (LinearFunction (Scalar v) u v)
  (LinearMap (Scalar u) u v)
-> LinearFunction (Scalar v) u v -> LinearMap (Scalar u) u v
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr LinearFunction
  (Scalar u)
  (LinearFunction (Scalar v) u v)
  (LinearMap (Scalar u) u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction (LinearFunction (Scalar v) u v -> LinearMap (Scalar u) u v)
-> (LinearMap (Scalar u) u v
    -> Maybe (LinearFunction (Scalar u) u v))
-> LinearFunction (Scalar v) u v
-> Maybe (LinearFunction (Scalar u) u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearMap (Scalar u) u v -> Maybe (LinearMap (Scalar u) u v)
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector
                       (LinearMap (Scalar u) u v -> Maybe (LinearMap (Scalar u) u v))
-> (Maybe (LinearMap (Scalar u) u v)
    -> Maybe (LinearFunction (Scalar u) u v))
-> LinearMap (Scalar u) u v
-> Maybe (LinearFunction (Scalar u) u v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearMap (Scalar u) u v -> LinearFunction (Scalar u) u v)
-> Maybe (LinearMap (Scalar u) u v)
-> Maybe (LinearFunction (Scalar u) u v)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (LinearFunction
  (Scalar u)
  (LinearMap (Scalar u) u v)
  (LinearFunction (Scalar u) u v)
-> LinearMap (Scalar u) u v -> LinearFunction (Scalar u) u v
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr LinearFunction
  (Scalar u)
  (LinearMap (Scalar u) u v)
  (LinearFunction (Scalar u) u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear)
  wellDefinedTensor :: (LinearFunction s u v ⊗ w) -> Maybe (LinearFunction s u v ⊗ w)
wellDefinedTensor = Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn (Tensor s (LinearFunction s u v) w
 -> LinearFunction s (LinearFunction s v u) w)
-> (LinearFunction s (LinearFunction s v u) w
    -> Maybe (Tensor s (LinearFunction s u v) w))
-> Tensor s (LinearFunction s u v) w
-> Maybe (Tensor s (LinearFunction s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearFunction s (LinearFunction s v u) w
-> LinearFunction
     s (LinearMap (Scalar v) v u) (LinearFunction s v u)
-> LinearFunction s (LinearMap (Scalar v) v u) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s (LinearMap (Scalar v) v u) (LinearFunction s v u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear)
                       (LinearFunction s (LinearFunction s v u) w
 -> LinearFunction s (LinearMap (Scalar v) v u) w)
-> (LinearFunction s (LinearMap (Scalar v) v u) w
    -> Maybe (Tensor s (LinearFunction s u v) w))
-> LinearFunction s (LinearFunction s v u) w
-> Maybe (Tensor s (LinearFunction s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  s
  (LinearFunction (Scalar w) (LinearMap (Scalar v) v u) w)
  (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
-> LinearFunction (Scalar w) (LinearMap (Scalar v) v u) w
-> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  s
  (LinearFunction (Scalar w) (LinearMap (Scalar v) v u) w)
  (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction
                       (LinearFunction s (LinearMap (Scalar v) v u) w
 -> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
-> (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
    -> Maybe (Tensor s (LinearFunction s u v) w))
-> LinearFunction s (LinearMap (Scalar v) v u) w
-> Maybe (Tensor s (LinearFunction s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
-> Maybe (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector
                       (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
 -> Maybe (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w))
-> (Maybe (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
    -> Maybe (Tensor s (LinearFunction s u v) w))
-> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
-> Maybe (Tensor s (LinearFunction s u v) w)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
 -> Tensor s (LinearFunction s u v) w)
-> Maybe (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
-> Maybe (Tensor s (LinearFunction s u v) w)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s v u) w
-> Tensor s (LinearFunction s u v) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr Coercion
  (LinearFunction s (LinearFunction s v u) w)
  (Tensor s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (Tensor s (LinearFunction s v u) w)
fromLinearFn (LinearFunction s (LinearFunction s v u) w
 -> Tensor s (LinearFunction s u v) w)
-> (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
    -> LinearFunction s (LinearFunction s v u) w)
-> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
-> Tensor s (LinearFunction s u v) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< \LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
m
                                   -> LinearFunction
  (Scalar v)
  (LinearFunction (Scalar u) v u)
  (LinearMap (Scalar v) v u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction
                                      LinearFunction
  (Scalar v)
  (LinearFunction (Scalar u) v u)
  (LinearMap (Scalar v) v u)
-> LinearFunction (Scalar v) (LinearMap (Scalar v) v u) w
-> LinearFunction (Scalar v) (LinearFunction (Scalar u) v u) w
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  s
  (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
  (LinearFunction (Scalar v) (LinearMap (Scalar v) v u) w)
-> LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
-> LinearFunction (Scalar v) (LinearMap (Scalar v) v u) w
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  s
  (LinearMap (Scalar v) (LinearMap (Scalar v) v u) w)
  (LinearFunction (Scalar v) (LinearMap (Scalar v) v u) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear LinearMap (Scalar v) (LinearMap (Scalar v) v u) w
m)

exposeLinearFn :: Coercion (LinearMap s (LinearFunction s u v) w)
                           (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn :: Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn = Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance (LinearSpace u, LinearSpace v, Scalar u ~ s, Scalar v ~ s)
     => LinearSpace (LinearFunction s u v) where
  type DualVector (LinearFunction s u v) = LinearFunction s v u
  dualSpaceWitness :: DualSpaceWitness (LinearFunction s u v)
dualSpaceWitness = case ( DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness u
                          , DualSpaceWitness v
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness v ) of
      (DualSpaceWitness u
DualSpaceWitness, DualSpaceWitness v
DualSpaceWitness) -> DualSpaceWitness (LinearFunction s u v)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  linearId :: LinearFunction s u v +> LinearFunction s u v
linearId = Coercion
  (LinearMap s (LinearFunction s u v) (LinearFunction s u v))
  (LinearFunction s (LinearFunction s u v) (LinearFunction s u v))
-> Coercion
     (LinearFunction s (LinearFunction s u v) (LinearFunction s u v))
     (LinearMap s (LinearFunction s u v) (LinearFunction s u v))
forall k (a :: k) (b :: k). Coercion a b -> Coercion b a
sym Coercion
  (LinearMap s (LinearFunction s u v) (LinearFunction s u v))
  (LinearFunction s (LinearFunction s u v) (LinearFunction s u v))
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn Coercion
  (LinearFunction s (LinearFunction s u v) (LinearFunction s u v))
  (LinearMap s (LinearFunction s u v) (LinearFunction s u v))
-> LinearFunction s (LinearFunction s u v) (LinearFunction s u v)
-> LinearMap s (LinearFunction s u v) (LinearFunction s u v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction s (LinearFunction s u v) (LinearFunction s u v)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
id
  tensorId :: (LinearFunction s u v ⊗ w) +> (LinearFunction s u v ⊗ w)
tensorId = Coercion
  (LinearMap
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
  (LinearMap
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
  (LinearMap
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w))
-> Coercion
     (LinearFunction
        s
        (LinearFunction s u v)
        (LinearMap s w (Tensor s (LinearFunction s u v) w)))
     (LinearMap
        s
        (LinearFunction s u v)
        (LinearMap s w (Tensor s (LinearFunction s u v) w)))
-> Coercion
     (LinearFunction
        s
        (LinearFunction s u v)
        (LinearMap s w (Tensor s (LinearFunction s u v) w)))
     (LinearMap
        s
        (Tensor s (LinearFunction s u v) w)
        (Tensor s (LinearFunction s u v) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
  (LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
-> Coercion
     (LinearFunction
        s
        (LinearFunction s u v)
        (LinearMap s w (Tensor s (LinearFunction s u v) w)))
     (LinearMap
        s
        (LinearFunction s u v)
        (LinearMap s w (Tensor s (LinearFunction s u v) w)))
forall k (a :: k) (b :: k). Coercion a b -> Coercion b a
sym Coercion
  (LinearMap
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
  (LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn
               Coercion
  (LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w)))
  (LinearMap
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w))
-> LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w))
-> LinearMap
     s
     (Tensor s (LinearFunction s u v) w)
     (Tensor s (LinearFunction s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction s u v
 -> LinearMap s w (Tensor s (LinearFunction s u v) w))
-> LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s u v
  -> LinearMap s w (Tensor s (LinearFunction s u v) w))
 -> LinearFunction
      s
      (LinearFunction s u v)
      (LinearMap s w (Tensor s (LinearFunction s u v) w)))
-> (LinearFunction s u v
    -> LinearMap s w (Tensor s (LinearFunction s u v) w))
-> LinearFunction
     s
     (LinearFunction s u v)
     (LinearMap s w (Tensor s (LinearFunction s u v) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction s u v
f -> LinearFunction
  s
  (LinearFunction s w (Tensor s (LinearFunction s u v) w))
  (LinearMap s w (Tensor s (LinearFunction s u v) w))
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunctionLinearFunction
  s
  (LinearFunction s w (Tensor s (LinearFunction s u v) w))
  (LinearMap s w (Tensor s (LinearFunction s u v) w))
-> LinearFunction s w (Tensor s (LinearFunction s u v) w)
-> LinearMap s w (Tensor s (LinearFunction s u v) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction
  s
  (LinearFunction s u v)
  (LinearFunction s w (Tensor s (LinearFunction s u v) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  s
  (LinearFunction s u v)
  (LinearFunction s w (Tensor s (LinearFunction s u v) w))
-> LinearFunction s u v
-> LinearFunction s w (Tensor s (LinearFunction s u v) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearFunction s u v
f
  coerceDoubleDual :: Coercion
  (LinearFunction s u v)
  (DualVector (DualVector (LinearFunction s u v)))
coerceDoubleDual = Coercion
  (LinearFunction s u v)
  (DualVector (DualVector (LinearFunction s u v)))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  sampleLinearFunction :: (LinearFunction s u v -+> w) -+> (LinearFunction s u v +> w)
sampleLinearFunction = (LinearFunction s (LinearFunction s u v) w
 -> LinearMap s (LinearFunction s u v) w)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction s (LinearFunction s u v) w
  -> LinearMap s (LinearFunction s u v) w)
 -> LinearFunction
      s
      (LinearFunction s (LinearFunction s u v) w)
      (LinearMap s (LinearFunction s u v) w))
-> (Coercion
      (LinearFunction s (LinearFunction s u v) w)
      (LinearMap s (LinearFunction s u v) w)
    -> LinearFunction s (LinearFunction s u v) w
    -> LinearMap s (LinearFunction s u v) w)
-> Coercion
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearFunction s (LinearFunction s u v) w)
  (LinearMap s (LinearFunction s u v) w)
-> LinearFunction s (LinearFunction s u v) w
-> LinearMap s (LinearFunction s u v) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
   (LinearFunction s (LinearFunction s u v) w)
   (LinearMap s (LinearFunction s u v) w)
 -> LinearFunction
      s
      (LinearFunction s (LinearFunction s u v) w)
      (LinearMap s (LinearFunction s u v) w))
-> Coercion
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
-> LinearFunction
     s
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
-> Coercion
     (LinearFunction s (LinearFunction s u v) w)
     (LinearMap s (LinearFunction s u v) w)
forall k (a :: k) (b :: k). Coercion a b -> Coercion b a
sym Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn
  applyDualVector :: Bilinear
  (DualVector (LinearFunction s u v))
  (LinearFunction s u v)
  (Scalar (LinearFunction s u v))
applyDualVector = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
       ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearFunction (Scalar u) v u
 -> LinearFunction (Scalar u) u v -> s)
-> LinearFunction
     (Scalar u)
     (LinearFunction (Scalar u) v u)
     (LinearFunction (Scalar u) (LinearFunction (Scalar u) u v) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearFunction (Scalar u) v u
  -> LinearFunction (Scalar u) u v -> s)
 -> LinearFunction
      (Scalar u)
      (LinearFunction (Scalar u) v u)
      (LinearFunction (Scalar u) (LinearFunction (Scalar u) u v) s))
-> (LinearFunction (Scalar u) v u
    -> LinearFunction (Scalar u) u v -> s)
-> LinearFunction
     (Scalar u)
     (LinearFunction (Scalar u) v u)
     (LinearFunction (Scalar u) (LinearFunction (Scalar u) u v) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                      \LinearFunction (Scalar u) v u
f LinearFunction (Scalar u) u v
g -> LinearFunction s (LinearMap (Scalar u) u u) s
forall v. LinearSpace v => LinearMap (Scalar v) v v -+> Scalar v
trace LinearFunction s (LinearMap (Scalar u) u u) s
-> LinearFunction
     s (LinearFunction (Scalar u) u u) (LinearMap (Scalar u) u u)
-> LinearFunction s (LinearFunction (Scalar u) u u) s
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s (LinearFunction (Scalar u) u u) (LinearMap (Scalar u) u u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction s (LinearFunction (Scalar u) u u) s
-> LinearFunction (Scalar u) u u -> s
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction (Scalar u) v u
f LinearFunction (Scalar u) v u
-> LinearFunction (Scalar u) u v -> LinearFunction (Scalar u) u u
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction (Scalar u) u v
g
  applyLinear :: Bilinear (LinearFunction s u v +> w) (LinearFunction s u v) w
applyLinear = (LinearMap s (LinearFunction s u v) w -> LinearFunction s u v -> w)
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) w)
     (LinearFunction s (LinearFunction s u v) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (LinearFunction s u v) w
  -> LinearFunction s u v -> w)
 -> LinearFunction
      s
      (LinearMap s (LinearFunction s u v) w)
      (LinearFunction s (LinearFunction s u v) w))
-> (LinearMap s (LinearFunction s u v) w
    -> LinearFunction s u v -> w)
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) w)
     (LinearFunction s (LinearFunction s u v) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearMap s (LinearFunction s u v) w
f LinearFunction s u v
g -> (Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
-> LinearMap s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (LinearFunction s u v) w
f) LinearFunction s (LinearFunction s u v) w
-> LinearFunction s u v -> w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction s u v
g
  applyTensorFunctional :: Bilinear
  (DualVector (LinearFunction s u v ⊗ u))
  (LinearFunction s u v ⊗ u)
  (Scalar (LinearFunction s u v))
applyTensorFunctional = ScalarSpaceWitness u
-> DualSpaceWitness u
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) (DualVector u))
     (LinearFunction s (Tensor s (LinearFunction s u v) u) s)
forall w.
(LinearSpace w, Scalar w ~ s) =>
ScalarSpaceWitness u
-> DualSpaceWitness w
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) (DualVector w))
     (LinearFunction s (Tensor s (LinearFunction s u v) w) s)
atf ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness u
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where atf ::  w . (LinearSpace w, Scalar w ~ s)
                => ScalarSpaceWitness u -> DualSpaceWitness w
                -> LinearFunction s
                    (LinearMap s (LinearFunction s u v) (DualVector w))
                    (LinearFunction s (Tensor s (LinearFunction s u v) w) s)
         atf :: ScalarSpaceWitness u
-> DualSpaceWitness w
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) (DualVector w))
     (LinearFunction s (Tensor s (LinearFunction s u v) w) s)
atf ScalarSpaceWitness u
ScalarSpaceWitness DualSpaceWitness w
DualSpaceWitness = (LinearMap s (LinearFunction s u v) (DualVector w)
 -> Tensor s (LinearFunction s u v) w -> s)
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) (DualVector w))
     (LinearFunction s (Tensor s (LinearFunction s u v) w) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (LinearFunction s u v) (DualVector w)
  -> Tensor s (LinearFunction s u v) w -> s)
 -> LinearFunction
      s
      (LinearMap s (LinearFunction s u v) (DualVector w))
      (LinearFunction s (Tensor s (LinearFunction s u v) w) s))
-> (LinearMap s (LinearFunction s u v) (DualVector w)
    -> Tensor s (LinearFunction s u v) w -> s)
-> LinearFunction
     s
     (LinearMap s (LinearFunction s u v) (DualVector w))
     (LinearFunction s (Tensor s (LinearFunction s u v) w) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearMap s (LinearFunction s u v) (DualVector w)
f Tensor s (LinearFunction s u v) w
g
                  -> LinearFunction s (LinearMap s w w) s
forall v. LinearSpace v => LinearMap (Scalar v) v v -+> Scalar v
trace LinearFunction s (LinearMap s w w) s -> LinearMap s w w -> s
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion (Tensor s (DualVector w) w) (LinearMap s w w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion (Tensor s (DualVector w) w) (LinearMap s w w)
-> Tensor s (DualVector w) w -> LinearMap s w w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s (Tensor (Scalar w) w (DualVector w)) (Tensor s (DualVector w) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                      LinearFunction
  s (Tensor (Scalar w) w (DualVector w)) (Tensor s (DualVector w) w)
-> Tensor (Scalar w) w (DualVector w) -> Tensor s (DualVector w) w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction s (LinearMap (Scalar u) u v) (DualVector w)
-> LinearFunction
     s
     (Tensor (Scalar w) w (LinearMap (Scalar u) u v))
     (Tensor (Scalar w) w (DualVector w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Coercion
  (LinearMap s (LinearFunction s u v) (DualVector w))
  (LinearFunction s (LinearFunction s u v) (DualVector w))
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn Coercion
  (LinearMap s (LinearFunction s u v) (DualVector w))
  (LinearFunction s (LinearFunction s u v) (DualVector w))
-> LinearMap s (LinearFunction s u v) (DualVector w)
-> LinearFunction s (LinearFunction s u v) (DualVector w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (LinearFunction s u v) (DualVector w)
f) LinearFunction s (LinearFunction s u v) (DualVector w)
-> LinearFunction
     s (LinearMap (Scalar u) u v) (LinearFunction s u v)
-> LinearFunction s (LinearMap (Scalar u) u v) (DualVector w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s (LinearMap (Scalar u) u v) (LinearFunction s u v)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear)
                          LinearFunction
  s
  (Tensor (Scalar w) w (LinearMap (Scalar u) u v))
  (Tensor (Scalar w) w (DualVector w))
-> Tensor (Scalar w) w (LinearMap (Scalar u) u v)
-> Tensor (Scalar w) w (DualVector w)
forall s v w. LinearFunction s v w -> v -> w
-+$> ( LinearFunction
  s
  (Tensor s (LinearMap s u v) w)
  (Tensor (Scalar w) w (LinearMap (Scalar u) u v))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                              LinearFunction
  s
  (Tensor s (LinearMap s u v) w)
  (Tensor (Scalar w) w (LinearMap (Scalar u) u v))
-> Tensor s (LinearMap s u v) w
-> Tensor (Scalar w) w (LinearMap (Scalar u) u v)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap
                               Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
-> LinearMap s u (Tensor s v w) -> Tensor s (LinearMap s u v) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction (Scalar v) (Tensor s w v) (Tensor s v w)
-> LinearFunction
     s (LinearMap s u (Tensor s w v)) (LinearMap s u (Tensor s v w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction (Scalar v) (Tensor s w v) (Tensor s v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                              LinearFunction
  s (LinearMap s u (Tensor s w v)) (LinearMap s u (Tensor s v w))
-> LinearMap s u (Tensor s w v) -> LinearMap s u (Tensor s v w)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (Tensor s (LinearMap s u w) v) (LinearMap s u (Tensor s w v))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
                               Coercion
  (Tensor s (LinearMap s u w) v) (LinearMap s u (Tensor s w v))
-> Tensor s (LinearMap s u w) v -> LinearMap s u (Tensor s w v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s (Tensor s v (LinearMap s u w)) (Tensor s (LinearMap s u w) v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                              LinearFunction
  s (Tensor s v (LinearMap s u w)) (Tensor s (LinearMap s u w) v)
-> Tensor s v (LinearMap s u w) -> Tensor s (LinearMap s u w) v
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s (LinearMap s v u) w) (Tensor s v (LinearMap s u w))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap
                               Coercion
  (LinearMap s (LinearMap s v u) w) (Tensor s v (LinearMap s u w))
-> LinearMap s (LinearMap s v u) w -> Tensor s v (LinearMap s u w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (LinearFunction s (LinearFunction s v u) w)
  (LinearMap s (LinearMap s v u) w)
forall u v w.
(LinearSpace u, LinearSpace v, TensorSpace w, Scalar u ~ Scalar v,
 Scalar v ~ Scalar w) =>
((u -+> v) -+> w) -+> ((u +> v) +> w)
sampleLinearFunctionFn
                              LinearFunction
  s
  (LinearFunction s (LinearFunction s v u) w)
  (LinearMap s (LinearMap s v u) w)
-> LinearFunction s (LinearFunction s v u) w
-> LinearMap s (LinearMap s v u) w
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
-> Tensor s (LinearFunction s u v) w
-> LinearFunction s (LinearFunction s v u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (LinearFunction s u v) w
g )
  applyTensorLinMap :: Bilinear
  ((LinearFunction s u v ⊗ u) +> w) (LinearFunction s u v ⊗ u) w
applyTensorLinMap = case ScalarSpaceWitness u
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness u of
         ScalarSpaceWitness u
ScalarSpaceWitness -> (LinearMap s (Tensor s (LinearFunction s u v) u) w
 -> Tensor s (LinearFunction s u v) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (LinearFunction s u v) u) w)
     (LinearFunction s (Tensor s (LinearFunction s u v) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (Tensor s (LinearFunction s u v) u) w
  -> Tensor s (LinearFunction s u v) u -> w)
 -> LinearFunction
      s
      (LinearMap s (Tensor s (LinearFunction s u v) u) w)
      (LinearFunction s (Tensor s (LinearFunction s u v) u) w))
-> (LinearMap s (Tensor s (LinearFunction s u v) u) w
    -> Tensor s (LinearFunction s u v) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (LinearFunction s u v) u) w)
     (LinearFunction s (Tensor s (LinearFunction s u v) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearMap s (Tensor s (LinearFunction s u v) u) w
f Tensor s (LinearFunction s u v) u
g
                 -> LinearFunction s (Tensor (Scalar u) u (LinearMap (Scalar u) u w)) w
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ (v +> w)) -+> w
contractMapTensor LinearFunction s (Tensor (Scalar u) u (LinearMap (Scalar u) u w)) w
-> LinearFunction
     s
     (Tensor (Scalar u) (LinearMap (Scalar u) u w) u)
     (Tensor (Scalar u) u (LinearMap (Scalar u) u w))
-> LinearFunction
     s (Tensor (Scalar u) (LinearMap (Scalar u) u w) u) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  s
  (Tensor (Scalar u) (LinearMap (Scalar u) u w) u)
  (Tensor (Scalar u) u (LinearMap (Scalar u) u w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                   LinearFunction s (Tensor (Scalar u) (LinearMap (Scalar u) u w) u) w
-> Tensor (Scalar u) (LinearMap (Scalar u) u w) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$> LinearFunction s (LinearMap (Scalar v) v u) u
-> LinearFunction
     s
     (Tensor
        (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u))
     (Tensor (Scalar u) (LinearMap (Scalar u) u w) u)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Coercion
  (Tensor s (LinearFunction s u v) u)
  (LinearFunction s (LinearFunction s v u) u)
forall s u v w.
Coercion
  (Tensor s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s v u) w)
asLinearFn Coercion
  (Tensor s (LinearFunction s u v) u)
  (LinearFunction s (LinearFunction s v u) u)
-> Tensor s (LinearFunction s u v) u
-> LinearFunction s (LinearFunction s v u) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (LinearFunction s u v) u
g) LinearFunction s (LinearFunction s v u) u
-> LinearFunction
     s (LinearMap (Scalar v) v u) (LinearFunction s v u)
-> LinearFunction s (LinearMap (Scalar v) v u) u
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction s (LinearMap (Scalar v) v u) (LinearFunction s v u)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinear)
                    LinearFunction
  s
  (Tensor
     (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u))
  (Tensor (Scalar u) (LinearMap (Scalar u) u w) u)
-> Tensor
     (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u)
-> Tensor (Scalar u) (LinearMap (Scalar u) u w) u
forall s v w. LinearFunction s v w -> v -> w
-+$> ( LinearFunction
  s
  (Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w))
  (Tensor
     (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                      LinearFunction
  s
  (Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w))
  (Tensor
     (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u))
-> Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w)
-> Tensor
     (Scalar u) (LinearMap (Scalar u) u w) (LinearMap (Scalar v) v u)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s v (Tensor s u (LinearMap (Scalar u) u w)))
  (Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w))
forall s u v w.
Coercion
  (LinearMap s u (Tensor s v w)) (Tensor s (LinearMap s u v) w)
deferLinearMap
                       Coercion
  (LinearMap s v (Tensor s u (LinearMap (Scalar u) u w)))
  (Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w))
-> LinearMap s v (Tensor s u (LinearMap (Scalar u) u w))
-> Tensor s (LinearMap s v u) (LinearMap (Scalar u) u w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar u)
  (Tensor s (LinearMap (Scalar u) u w) u)
  (Tensor s u (LinearMap (Scalar u) u w))
-> LinearFunction
     s
     (LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u))
     (LinearMap s v (Tensor s u (LinearMap (Scalar u) u w)))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap LinearFunction
  (Scalar u)
  (Tensor s (LinearMap (Scalar u) u w) u)
  (Tensor s u (LinearMap (Scalar u) u w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                      LinearFunction
  s
  (LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u))
  (LinearMap s v (Tensor s u (LinearMap (Scalar u) u w)))
-> LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u)
-> LinearMap s v (Tensor s u (LinearMap (Scalar u) u w))
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u)
  (LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u))
forall s u v w.
Coercion
  (Tensor s (LinearMap s u v) w) (LinearMap s u (Tensor s v w))
hasteLinearMap
                       Coercion
  (Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u)
  (LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u))
-> Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u
-> LinearMap s v (Tensor s (LinearMap (Scalar u) u w) u)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (Tensor s u (LinearMap s v (LinearMap (Scalar u) u w)))
  (Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor
                      LinearFunction
  s
  (Tensor s u (LinearMap s v (LinearMap (Scalar u) u w)))
  (Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u)
-> Tensor s u (LinearMap s v (LinearMap (Scalar u) u w))
-> Tensor s (LinearMap s v (LinearMap (Scalar u) u w)) u
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w))
  (Tensor s u (LinearMap s v (LinearMap (Scalar u) u w)))
forall s u v w.
(LinearSpace u, Scalar u ~ s, LinearSpace v, Scalar v ~ s) =>
Coercion
  (LinearMap s (LinearMap s u v) w) (Tensor s u (LinearMap s v w))
coCurryLinearMap
                       Coercion
  (LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w))
  (Tensor s u (LinearMap s v (LinearMap (Scalar u) u w)))
-> LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w)
-> Tensor s u (LinearMap s v (LinearMap (Scalar u) u w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  s
  (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
  (LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w))
forall u v w.
(LinearSpace u, LinearSpace v, TensorSpace w, Scalar u ~ Scalar v,
 Scalar v ~ Scalar w) =>
((u -+> v) -+> w) -+> ((u +> v) +> w)
sampleLinearFunctionFn
                      LinearFunction
  s
  (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
  (LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w))
-> LinearFunction s (LinearFunction s u v) (LinearMap s u w)
-> LinearMap s (LinearMap s u v) (LinearMap (Scalar u) u w)
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap s (LinearFunction s u v) (LinearMap s u w))
  (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
forall s u v w.
Coercion
  (LinearMap s (LinearFunction s u v) w)
  (LinearFunction s (LinearFunction s u v) w)
exposeLinearFn Coercion
  (LinearMap s (LinearFunction s u v) (LinearMap s u w))
  (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
-> Coercion
     (LinearMap s (Tensor s (LinearFunction s u v) u) w)
     (LinearMap s (LinearFunction s u v) (LinearMap s u w))
-> Coercion
     (LinearMap s (Tensor s (LinearFunction s u v) u) w)
     (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (LinearMap s (Tensor s (LinearFunction s u v) u) w)
  (LinearMap s (LinearFunction s u v) (LinearMap s u w))
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s (Tensor s u v) w) (LinearMap s u (LinearMap s v w))
curryLinearMap Coercion
  (LinearMap s (Tensor s (LinearFunction s u v) u) w)
  (LinearFunction s (LinearFunction s u v) (LinearMap s u w))
-> LinearMap s (Tensor s (LinearFunction s u v) u) w
-> LinearFunction s (LinearFunction s u v) (LinearMap s u w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (Tensor s (LinearFunction s u v) u) w
f )
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError


instance (TensorSpace u, TensorSpace v, s~Scalar u, s~Scalar v)
                      => AffineSpace (Tensor s u v) where
  type Diff (Tensor s u v) = Tensor s u v
  .-. :: Tensor s u v -> Tensor s u v -> Diff (Tensor s u v)
(.-.) = Tensor s u v -> Tensor s u v -> Diff (Tensor s u v)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
  .+^ :: Tensor s u v -> Diff (Tensor s u v) -> Tensor s u v
(.+^) = Tensor s u v -> Diff (Tensor s u v) -> Tensor s u v
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance (LinearSpace u, TensorSpace v, s~Scalar u, s~Scalar v)
                      => AffineSpace (LinearMap s u v) where
  type Diff (LinearMap s u v) = LinearMap s u v
  .-. :: LinearMap s u v -> LinearMap s u v -> Diff (LinearMap s u v)
(.-.) = LinearMap s u v -> LinearMap s u v -> Diff (LinearMap s u v)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
  .+^ :: LinearMap s u v -> Diff (LinearMap s u v) -> LinearMap s u v
(.+^) = LinearMap s u v -> Diff (LinearMap s u v) -> LinearMap s u v
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance (TensorSpace u, TensorSpace v, s~Scalar u, s~Scalar v)
                      => AffineSpace (LinearFunction s u v) where
  type Diff (LinearFunction s u v) = LinearFunction s u v
  .-. :: LinearFunction s u v
-> LinearFunction s u v -> Diff (LinearFunction s u v)
(.-.) = LinearFunction s u v
-> LinearFunction s u v -> Diff (LinearFunction s u v)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
  .+^ :: LinearFunction s u v
-> Diff (LinearFunction s u v) -> LinearFunction s u v
(.+^) = LinearFunction s u v
-> Diff (LinearFunction s u v) -> LinearFunction s u v
forall v. AdditiveGroup v => v -> v -> v
(^+^)

  
-- | Use a function as a linear map. This is only well-defined if the function /is/
--   linear (this condition is not checked).
lfun :: ( EnhancedCat f (LinearFunction s)
        , LinearSpace u, TensorSpace v, Scalar u ~ s, Scalar v ~ s
        , Object f u, Object f v ) => (u->v) -> f u v
lfun :: (u -> v) -> f u v
lfun = LinearFunction s u v -> f u v
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction s u v -> f u v)
-> ((u -> v) -> LinearFunction s u v) -> (u -> v) -> f u v
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (u -> v) -> LinearFunction s u v
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction


genericTensorspaceError :: a
genericTensorspaceError :: a
genericTensorspaceError = [Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"GHC.Generics types can not be used as tensor spaces."

usingNonTupleTypeAsTupleError :: a
usingNonTupleTypeAsTupleError :: a
usingNonTupleTypeAsTupleError = [Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"This is not a tuple type, the method should not be callable."

instance  v s . TensorSpace v => TensorSpace (Gnrx.Rec0 v s) where
  type TensorProduct (Gnrx.Rec0 v s) w = TensorProduct v w
  wellDefinedVector :: Rec0 v s -> Maybe (Rec0 v s)
wellDefinedVector = (v -> Rec0 v s) -> Maybe v -> Maybe (Rec0 v s)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 (Maybe v -> Maybe (Rec0 v s))
-> (Rec0 v s -> Maybe v) -> Rec0 v s -> Maybe (Rec0 v s)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. v -> Maybe v
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector (v -> Maybe v) -> (Rec0 v s -> v) -> Rec0 v s -> Maybe v
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1
  wellDefinedTensor :: (Rec0 v s ⊗ w) -> Maybe (Rec0 v s ⊗ w)
wellDefinedTensor = Coercion
  (Maybe (Tensor (Scalar v) v w))
  (Maybe (Tensor (Scalar v) (Rec0 v s) w))
-> Maybe (Tensor (Scalar v) v w)
-> Maybe (Tensor (Scalar v) (Rec0 v s) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Coercion
     (Maybe (Tensor (Scalar v) v w))
     (Maybe (Tensor (Scalar v) (Rec0 v s) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
 -> Coercion
      (Maybe (Tensor (Scalar v) v w))
      (Maybe (Tensor (Scalar v) (Rec0 v s) w)))
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Coercion
     (Maybe (Tensor (Scalar v) v w))
     (Maybe (Tensor (Scalar v) (Rec0 v s) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1)
                         (Maybe (Tensor (Scalar v) v w)
 -> Maybe (Tensor (Scalar v) (Rec0 v s) w))
-> (Tensor (Scalar v) (Rec0 v s) w
    -> Maybe (Tensor (Scalar v) v w))
-> Tensor (Scalar v) (Rec0 v s) w
-> Maybe (Tensor (Scalar v) (Rec0 v s) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Tensor (Scalar v) v w -> Maybe (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor (Scalar v) v w -> Maybe (Tensor (Scalar v) v w))
-> (Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) v w)
-> Tensor (Scalar v) (Rec0 v s) w
-> Maybe (Tensor (Scalar v) v w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
-> Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) v w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1)
  scalarSpaceWitness :: ScalarSpaceWitness (Rec0 v s)
scalarSpaceWitness = ScalarSpaceWitness (Rec0 v s)
forall a. a
genericTensorspaceError
  linearManifoldWitness :: LinearManifoldWitness (Rec0 v s)
linearManifoldWitness = LinearManifoldWitness (Rec0 v s)
forall a. a
genericTensorspaceError
  zeroTensor :: Rec0 v s ⊗ w
zeroTensor = (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) (Rec0 v s) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) v w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  toFlatTensor :: Rec0 v s -+> (Rec0 v s ⊗ Scalar (Rec0 v s))
toFlatTensor = (Rec0 v s -> Tensor (Scalar v) (Rec0 v s) (Scalar v))
-> LinearFunction
     (Scalar v) (Rec0 v s) (Tensor (Scalar v) (Rec0 v s) (Scalar v))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Rec0 v s -> Tensor (Scalar v) (Rec0 v s) (Scalar v))
 -> LinearFunction
      (Scalar v) (Rec0 v s) (Tensor (Scalar v) (Rec0 v s) (Scalar v)))
-> (Rec0 v s -> Tensor (Scalar v) (Rec0 v s) (Scalar v))
-> LinearFunction
     (Scalar v) (Rec0 v s) (Tensor (Scalar v) (Rec0 v s) (Scalar v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1 (Rec0 v s -> v)
-> (v -> Tensor (Scalar v) (Rec0 v s) (Scalar v))
-> Rec0 v s
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction (Scalar v) v (Tensor (Scalar v) v (Scalar v))
-> v -> Tensor (Scalar v) v (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction (Scalar v) v (Tensor (Scalar v) v (Scalar v))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
                   (v -> Tensor (Scalar v) v (Scalar v))
-> (Tensor (Scalar v) v (Scalar v)
    -> Tensor (Scalar v) (Rec0 v s) (Scalar v))
-> v
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor (Scalar v) v (Scalar v))
  (Tensor (Scalar v) (Rec0 v s) (Scalar v))
-> Tensor (Scalar v) v (Scalar v)
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v (Scalar v))
     (Tensor (Scalar v) (Rec0 v s) (Scalar v))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1)
  fromFlatTensor :: (Rec0 v s ⊗ Scalar (Rec0 v s)) -+> Rec0 v s
fromFlatTensor = (Tensor (Scalar v) (Rec0 v s) (Scalar v) -> Rec0 v s)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) (Rec0 v s) (Scalar v)) (Rec0 v s)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar v) (Rec0 v s) (Scalar v) -> Rec0 v s)
 -> LinearFunction
      (Scalar v) (Tensor (Scalar v) (Rec0 v s) (Scalar v)) (Rec0 v s))
-> (Tensor (Scalar v) (Rec0 v s) (Scalar v) -> Rec0 v s)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) (Rec0 v s) (Scalar v)) (Rec0 v s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 (v -> Rec0 v s)
-> (Tensor (Scalar v) (Rec0 v s) (Scalar v) -> v)
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
-> Rec0 v s
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction (Scalar v) (Tensor (Scalar v) v (Scalar v)) v
-> Tensor (Scalar v) v (Scalar v) -> v
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction (Scalar v) (Tensor (Scalar v) v (Scalar v)) v
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
                   (Tensor (Scalar v) v (Scalar v) -> v)
-> (Tensor (Scalar v) (Rec0 v s) (Scalar v)
    -> Tensor (Scalar v) v (Scalar v))
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
-> v
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor (Scalar v) (Rec0 v s) (Scalar v))
  (Tensor (Scalar v) v (Scalar v))
-> Tensor (Scalar v) (Rec0 v s) (Scalar v)
-> Tensor (Scalar v) v (Scalar v)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) (Scalar v))
     (Tensor (Scalar v) v (Scalar v))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1)
  addTensors :: (Rec0 v s ⊗ w) -> (Rec0 v s ⊗ w) -> Rec0 v s ⊗ w
addTensors (Tensor TensorProduct (Rec0 v s) w
s) (Tensor TensorProduct (Rec0 v s) w
t)
       = (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) (Rec0 v s) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) v w
-> Tensor (Scalar v) v w -> Tensor (Scalar v) v w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
addTensors (TensorProduct v w -> Tensor (Scalar v) v w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct v w
TensorProduct (Rec0 v s) w
s) (TensorProduct v w -> Tensor (Scalar v) v w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct v w
TensorProduct (Rec0 v s) w
t)
  subtractTensors :: (Rec0 v s ⊗ w) -> (Rec0 v s ⊗ w) -> Rec0 v s ⊗ w
subtractTensors (Tensor TensorProduct (Rec0 v s) w
s) (Tensor TensorProduct (Rec0 v s) w
t)
       = (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) (Rec0 v s) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) v w
-> Tensor (Scalar v) v w -> Tensor (Scalar v) v w
forall v w.
(TensorSpace v, TensorSpace v, TensorSpace w,
 Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
subtractTensors (TensorProduct v w -> Tensor (Scalar v) v w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct v w
TensorProduct (Rec0 v s) w
s) (TensorProduct v w -> Tensor (Scalar v) v w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct v w
TensorProduct (Rec0 v s) w
t)
  scaleTensor :: Bilinear (Scalar (Rec0 v s)) (Rec0 v s ⊗ w) (Rec0 v s ⊗ w)
scaleTensor = (Scalar v
 -> LinearFunction
      (Scalar (Scalar v))
      (Tensor (Scalar v) (Rec0 v s) w)
      (Tensor (Scalar v) (Rec0 v s) w))
-> LinearFunction
     (Scalar (Scalar v))
     (Scalar v)
     (LinearFunction
        (Scalar (Scalar v))
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Scalar v
  -> LinearFunction
       (Scalar (Scalar v))
       (Tensor (Scalar v) (Rec0 v s) w)
       (Tensor (Scalar v) (Rec0 v s) w))
 -> LinearFunction
      (Scalar (Scalar v))
      (Scalar v)
      (LinearFunction
         (Scalar (Scalar v))
         (Tensor (Scalar v) (Rec0 v s) w)
         (Tensor (Scalar v) (Rec0 v s) w)))
-> (Scalar v
    -> LinearFunction
         (Scalar (Scalar v))
         (Tensor (Scalar v) (Rec0 v s) w)
         (Tensor (Scalar v) (Rec0 v s) w))
-> LinearFunction
     (Scalar (Scalar v))
     (Scalar v)
     (LinearFunction
        (Scalar (Scalar v))
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar v
μ -> (v -> Rec0 v s)
-> LinearFunction
     (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1
                                         (LinearFunction
   (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
 -> LinearFunction
      (Scalar (Scalar v))
      (Tensor (Scalar v) (Rec0 v s) w)
      (Tensor (Scalar v) (Rec0 v s) w))
-> LinearFunction
     (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) v w)
     (Tensor (Scalar v) v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar v))
  (Scalar v)
  (LinearFunction
     (Scalar (Scalar v))
     (Tensor (Scalar v) v w)
     (Tensor (Scalar v) v w))
-> Scalar v
-> LinearFunction
     (Scalar (Scalar v)) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar v
μ
  negateTensor :: (Rec0 v s ⊗ w) -+> (Rec0 v s ⊗ w)
negateTensor = (v -> Rec0 v s)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensor
  tensorProduct :: Bilinear (Rec0 v s) w (Rec0 v s ⊗ w)
tensorProduct = (Rec0 v s -> w -> Tensor (Scalar v) (Rec0 v s) w)
-> LinearFunction
     (Scalar v)
     (Rec0 v s)
     (LinearFunction (Scalar v) w (Tensor (Scalar v) (Rec0 v s) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((Rec0 v s -> w -> Tensor (Scalar v) (Rec0 v s) w)
 -> LinearFunction
      (Scalar v)
      (Rec0 v s)
      (LinearFunction (Scalar v) w (Tensor (Scalar v) (Rec0 v s) w)))
-> (Rec0 v s -> w -> Tensor (Scalar v) (Rec0 v s) w)
-> LinearFunction
     (Scalar v)
     (Rec0 v s)
     (LinearFunction (Scalar v) w (Tensor (Scalar v) (Rec0 v s) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Gnrx.K1 v
v) w
w
                      -> (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1
                           Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Tensor (Scalar v) v w -> Tensor (Scalar v) (Rec0 v s) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar v) v (LinearFunction (Scalar v) w (Tensor (Scalar v) v w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar v) v (LinearFunction (Scalar v) w (Tensor (Scalar v) v w))
-> v -> LinearFunction (Scalar v) w (Tensor (Scalar v) v w)
forall s v w. LinearFunction s v w -> v -> w
-+$>v
v)LinearFunction (Scalar v) w (Tensor (Scalar v) v w)
-> w -> Tensor (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w
  transposeTensor :: (Rec0 v s ⊗ w) -+> (w ⊗ Rec0 v s)
transposeTensor = (Rec0 v s ⊗ w) -+> (w ⊗ Rec0 v s)
forall w.
(TensorSpace w, Scalar w ~ Scalar v) =>
(Rec0 v s ⊗ w) -+> (w ⊗ Rec0 v s)
tT
   where tT ::  w . (TensorSpace w, Scalar w ~ Scalar v)
                => (Gnrx.Rec0 v s  w) -+> (w  Gnrx.Rec0 v s)
         tT :: (Rec0 v s ⊗ w) -+> (w ⊗ Rec0 v s)
tT = (Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) w (Rec0 v s))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) w (Rec0 v s))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
           ((Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) w (Rec0 v s))
 -> LinearFunction
      (Scalar v)
      (Tensor (Scalar v) (Rec0 v s) w)
      (Tensor (Scalar v) w (Rec0 v s)))
-> (Tensor (Scalar v) (Rec0 v s) w
    -> Tensor (Scalar v) w (Rec0 v s))
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) w (Rec0 v s))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion (Tensor (Scalar w) w v) (Tensor (Scalar v) w (Rec0 v s))
-> Tensor (Scalar w) w v -> Tensor (Scalar v) w (Rec0 v s)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (TensorProduct w (Rec0 v s)) (Tensor (Scalar v) w (Rec0 v s))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion Coercion
  (TensorProduct w (Rec0 v s)) (Tensor (Scalar v) w (Rec0 v s))
-> Coercion (Tensor (Scalar w) w v) (TensorProduct w (Rec0 v s))
-> Coercion
     (Tensor (Scalar w) w v) (Tensor (Scalar v) w (Rec0 v s))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. [w]
-> Coercion v (Rec0 v s)
-> Coercion (TensorProduct w v) (TensorProduct w (Rec0 v s))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[w])
                                    (Coercion v (Rec0 v s)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion v (Gnrx.Rec0 v s)) Coercion (TensorProduct w v) (TensorProduct w (Rec0 v s))
-> Coercion (Tensor (Scalar w) w v) (TensorProduct w v)
-> Coercion (Tensor (Scalar w) w v) (TensorProduct w (Rec0 v s))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor (Scalar w) w v) (TensorProduct w v)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion)
              (Tensor (Scalar w) w v -> Tensor (Scalar v) w (Rec0 v s))
-> (Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar w) w v)
-> Tensor (Scalar v) (Rec0 v s) w
-> Tensor (Scalar v) w (Rec0 v s)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar w) w v)
-> Tensor (Scalar v) v w -> Tensor (Scalar w) w v
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar w) w v)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor (Tensor (Scalar v) v w -> Tensor (Scalar w) w v)
-> (Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) v w)
-> Tensor (Scalar v) (Rec0 v s) w
-> Tensor (Scalar w) w v
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
-> Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) v w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1)
  fmapTensor :: Bilinear (w -+> x) (Rec0 v s ⊗ w) (Rec0 v s ⊗ x)
fmapTensor = ((w -+> x)
 -> LinearFunction
      (Scalar v)
      (Tensor (Scalar v) (Rec0 v s) w)
      (Tensor (Scalar v) (Rec0 v s) x))
-> LinearFunction
     (Scalar v)
     (w -+> x)
     (LinearFunction
        (Scalar v)
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((w -+> x)
  -> LinearFunction
       (Scalar v)
       (Tensor (Scalar v) (Rec0 v s) w)
       (Tensor (Scalar v) (Rec0 v s) x))
 -> LinearFunction
      (Scalar v)
      (w -+> x)
      (LinearFunction
         (Scalar v)
         (Tensor (Scalar v) (Rec0 v s) w)
         (Tensor (Scalar v) (Rec0 v s) x)))
-> ((w -+> x)
    -> LinearFunction
         (Scalar v)
         (Tensor (Scalar v) (Rec0 v s) w)
         (Tensor (Scalar v) (Rec0 v s) x))
-> LinearFunction
     (Scalar v)
     (w -+> x)
     (LinearFunction
        (Scalar v)
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \w -+> x
f -> (v -> Rec0 v s)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) x)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1 (LinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar v)
  (w -+> x)
  (LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x))
-> (w -+> x)
-> LinearFunction
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)
  fzipTensorWith :: Bilinear ((w, x) -+> u) (Rec0 v s ⊗ w, Rec0 v s ⊗ x) (Rec0 v s ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
 -> Tensor (Scalar v) (Rec0 v s) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
        (Tensor (Scalar v) (Rec0 v s) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((((w, x) -+> u)
  -> (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
  -> Tensor (Scalar v) (Rec0 v s) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
         (Tensor (Scalar v) (Rec0 v s) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
    -> Tensor (Scalar v) (Rec0 v s) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar v) (Rec0 v s) w, Tensor (Scalar v) (Rec0 v s) x)
        (Tensor (Scalar v) (Rec0 v s) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \(w, x) -+> u
f (Tensor (Scalar v) (Rec0 v s) w
wt, Tensor (Scalar v) (Rec0 v s) x
xt) -> (v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v u) (Tensor (Scalar v) (Rec0 v s) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1
                        Coercion (Tensor (Scalar v) v u) (Tensor (Scalar v) (Rec0 v s) u)
-> Tensor (Scalar v) v u -> Tensor (Scalar v) (Rec0 v s) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar v)
  ((w, x) -+> u)
  (LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar v)
     (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
     (Tensor (Scalar v) v u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)
                         LinearFunction
  (Scalar v)
  (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
  (Tensor (Scalar v) v u)
-> (Tensor (Scalar v) v w, Tensor (Scalar v) v x)
-> Tensor (Scalar v) v u
forall s v w. LinearFunction s v w -> v -> w
-+$>( (Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1 Coercion (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
-> Tensor (Scalar v) (Rec0 v s) w -> Tensor (Scalar v) v w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (Rec0 v s) w
wt
                             , (Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) x) (Tensor (Scalar v) v x)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1 Coercion (Tensor (Scalar v) (Rec0 v s) x) (Tensor (Scalar v) v x)
-> Tensor (Scalar v) (Rec0 v s) x -> Tensor (Scalar v) v x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (Rec0 v s) x
xt )
  coerceFmapTensorProduct :: p (Rec0 v s)
-> Coercion a b
-> Coercion
     (TensorProduct (Rec0 v s) a) (TensorProduct (Rec0 v s) b)
coerceFmapTensorProduct = p (Rec0 v s)
-> Coercion a b
-> Coercion
     (TensorProduct (Rec0 v s) a) (TensorProduct (Rec0 v s) b)
forall (p :: * -> *) a b.
Functor p =>
p (Rec0 v s)
-> Coercion a b
-> Coercion
     (TensorProduct (Rec0 v s) a) (TensorProduct (Rec0 v s) b)
cmtp
   where cmtp ::  p a b . Hask.Functor p
             => p (Gnrx.Rec0 v s) -> Coercion a b
               -> Coercion (TensorProduct (Gnrx.Rec0 v s) a)
                           (TensorProduct (Gnrx.Rec0 v s) b)
         cmtp :: p (Rec0 v s)
-> Coercion a b
-> Coercion
     (TensorProduct (Rec0 v s) a) (TensorProduct (Rec0 v s) b)
cmtp p (Rec0 v s)
p Coercion a b
crc = case [v]
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[v]) Coercion a b
crc of
                  Coercion (TensorProduct v a) (TensorProduct v b)
Coercion -> Coercion (TensorProduct (Rec0 v s) a) (TensorProduct (Rec0 v s) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance  i c f p . TensorSpace (f p) => TensorSpace (Gnrx.M1 i c f p) where
  type TensorProduct (Gnrx.M1 i c f p) w = TensorProduct (f p) w
  wellDefinedVector :: M1 i c f p -> Maybe (M1 i c f p)
wellDefinedVector = (f p -> M1 i c f p) -> Maybe (f p) -> Maybe (M1 i c f p)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 (Maybe (f p) -> Maybe (M1 i c f p))
-> (M1 i c f p -> Maybe (f p)) -> M1 i c f p -> Maybe (M1 i c f p)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. f p -> Maybe (f p)
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector (f p -> Maybe (f p))
-> (M1 i c f p -> f p) -> M1 i c f p -> Maybe (f p)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1
  wellDefinedTensor :: (M1 i c f p ⊗ w) -> Maybe (M1 i c f p ⊗ w)
wellDefinedTensor = Coercion
  (Maybe (Tensor (Scalar (f p)) (f p) w))
  (Maybe (Tensor (Scalar (f p)) (M1 i c f p) w))
-> Maybe (Tensor (Scalar (f p)) (f p) w)
-> Maybe (Tensor (Scalar (f p)) (M1 i c f p) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Coercion
     (Maybe (Tensor (Scalar (f p)) (f p) w))
     (Maybe (Tensor (Scalar (f p)) (M1 i c f p) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
   (Tensor (Scalar (f p)) (f p) w)
   (Tensor (Scalar (f p)) (M1 i c f p) w)
 -> Coercion
      (Maybe (Tensor (Scalar (f p)) (f p) w))
      (Maybe (Tensor (Scalar (f p)) (M1 i c f p) w)))
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Coercion
     (Maybe (Tensor (Scalar (f p)) (f p) w))
     (Maybe (Tensor (Scalar (f p)) (M1 i c f p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1)
                         (Maybe (Tensor (Scalar (f p)) (f p) w)
 -> Maybe (Tensor (Scalar (f p)) (M1 i c f p) w))
-> (Tensor (Scalar (f p)) (M1 i c f p) w
    -> Maybe (Tensor (Scalar (f p)) (f p) w))
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Maybe (Tensor (Scalar (f p)) (M1 i c f p) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Tensor (Scalar (f p)) (f p) w
-> Maybe (Tensor (Scalar (f p)) (f p) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor (Scalar (f p)) (f p) w
 -> Maybe (Tensor (Scalar (f p)) (f p) w))
-> (Tensor (Scalar (f p)) (M1 i c f p) w
    -> Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Maybe (Tensor (Scalar (f p)) (f p) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Tensor (Scalar (f p)) (f p) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1)
  scalarSpaceWitness :: ScalarSpaceWitness (M1 i c f p)
scalarSpaceWitness = ScalarSpaceWitness (M1 i c f p)
forall a. a
genericTensorspaceError
  linearManifoldWitness :: LinearManifoldWitness (M1 i c f p)
linearManifoldWitness = LinearManifoldWitness (M1 i c f p)
forall a. a
genericTensorspaceError
  zeroTensor :: M1 i c f p ⊗ w
zeroTensor = (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (M1 i c f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (f p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  toFlatTensor :: M1 i c f p -+> (M1 i c f p ⊗ Scalar (M1 i c f p))
toFlatTensor = (M1 i c f p -> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
-> LinearFunction
     (Scalar (f p))
     (M1 i c f p)
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((M1 i c f p -> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
 -> LinearFunction
      (Scalar (f p))
      (M1 i c f p)
      (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))))
-> (M1 i c f p
    -> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
-> LinearFunction
     (Scalar (f p))
     (M1 i c f p)
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1 (M1 i c f p -> f p)
-> (f p -> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
-> M1 i c f p
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (f p)) (f p) (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
-> f p -> Tensor (Scalar (f p)) (f p) (Scalar (f p))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (f p)) (f p) (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
                   (f p -> Tensor (Scalar (f p)) (f p) (Scalar (f p)))
-> (Tensor (Scalar (f p)) (f p) (Scalar (f p))
    -> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
-> f p
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Coercion
  (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
  (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
-> Tensor (Scalar (f p)) (f p) (Scalar (f p))
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1)
  fromFlatTensor :: (M1 i c f p ⊗ Scalar (M1 i c f p)) -+> M1 i c f p
fromFlatTensor = (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)) -> M1 i c f p)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
     (M1 i c f p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)) -> M1 i c f p)
 -> LinearFunction
      (Scalar (f p))
      (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
      (M1 i c f p))
-> (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
    -> M1 i c f p)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
     (M1 i c f p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 (f p -> M1 i c f p)
-> (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)) -> f p)
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
-> M1 i c f p
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< LinearFunction
  (Scalar (f p)) (Tensor (Scalar (f p)) (f p) (Scalar (f p))) (f p)
-> Tensor (Scalar (f p)) (f p) (Scalar (f p)) -> f p
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (f p)) (Tensor (Scalar (f p)) (f p) (Scalar (f p))) (f p)
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
                   (Tensor (Scalar (f p)) (f p) (Scalar (f p)) -> f p)
-> (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
    -> Tensor (Scalar (f p)) (f p) (Scalar (f p)))
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
-> f p
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
<<< Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
  (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
-> Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p))
-> Tensor (Scalar (f p)) (f p) (Scalar (f p))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1)
  addTensors :: (M1 i c f p ⊗ w) -> (M1 i c f p ⊗ w) -> M1 i c f p ⊗ w
addTensors (Tensor TensorProduct (M1 i c f p) w
s) (Tensor TensorProduct (M1 i c f p) w
t)
       = (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (M1 i c f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar (f p)) (f p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
addTensors (TensorProduct (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (f p) w
TensorProduct (M1 i c f p) w
s) (TensorProduct (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (f p) w
TensorProduct (M1 i c f p) w
t)
  subtractTensors :: (M1 i c f p ⊗ w) -> (M1 i c f p ⊗ w) -> M1 i c f p ⊗ w
subtractTensors (Tensor TensorProduct (M1 i c f p) w
s) (Tensor TensorProduct (M1 i c f p) w
t)
       = (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (M1 i c f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar (f p)) (f p) w
forall v w.
(TensorSpace v, TensorSpace v, TensorSpace w,
 Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
subtractTensors (TensorProduct (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (f p) w
TensorProduct (M1 i c f p) w
s) (TensorProduct (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (f p) w
TensorProduct (M1 i c f p) w
t)
  scaleTensor :: Bilinear (Scalar (M1 i c f p)) (M1 i c f p ⊗ w) (M1 i c f p ⊗ w)
scaleTensor = (Scalar (f p)
 -> LinearFunction
      (Scalar (Scalar (f p)))
      (Tensor (Scalar (f p)) (M1 i c f p) w)
      (Tensor (Scalar (f p)) (M1 i c f p) w))
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Scalar (f p))
     (LinearFunction
        (Scalar (Scalar (f p)))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Scalar (f p)
  -> LinearFunction
       (Scalar (Scalar (f p)))
       (Tensor (Scalar (f p)) (M1 i c f p) w)
       (Tensor (Scalar (f p)) (M1 i c f p) w))
 -> LinearFunction
      (Scalar (Scalar (f p)))
      (Scalar (f p))
      (LinearFunction
         (Scalar (Scalar (f p)))
         (Tensor (Scalar (f p)) (M1 i c f p) w)
         (Tensor (Scalar (f p)) (M1 i c f p) w)))
-> (Scalar (f p)
    -> LinearFunction
         (Scalar (Scalar (f p)))
         (Tensor (Scalar (f p)) (M1 i c f p) w)
         (Tensor (Scalar (f p)) (M1 i c f p) w))
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Scalar (f p))
     (LinearFunction
        (Scalar (Scalar (f p)))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar (f p)
μ -> (f p -> M1 i c f p)
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1
                                         (LinearFunction
   (Scalar (Scalar (f p)))
   (Tensor (Scalar (f p)) (f p) w)
   (Tensor (Scalar (f p)) (f p) w)
 -> LinearFunction
      (Scalar (Scalar (f p)))
      (Tensor (Scalar (f p)) (M1 i c f p) w)
      (Tensor (Scalar (f p)) (M1 i c f p) w))
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (Scalar (f p)))
  (Scalar (f p))
  (LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar (f p)))
  (Scalar (f p))
  (LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w))
-> Scalar (f p)
-> LinearFunction
     (Scalar (Scalar (f p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar (f p)
μ
  negateTensor :: (M1 i c f p ⊗ w) -+> (M1 i c f p ⊗ w)
negateTensor = (f p -> M1 i c f p)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 LinearFunction
  (Scalar (f p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensor
  tensorProduct :: Bilinear (M1 i c f p) w (M1 i c f p ⊗ w)
tensorProduct = (M1 i c f p -> w -> Tensor (Scalar (f p)) (M1 i c f p) w)
-> LinearFunction
     (Scalar (f p))
     (M1 i c f p)
     (LinearFunction
        (Scalar (f p)) w (Tensor (Scalar (f p)) (M1 i c f p) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((M1 i c f p -> w -> Tensor (Scalar (f p)) (M1 i c f p) w)
 -> LinearFunction
      (Scalar (f p))
      (M1 i c f p)
      (LinearFunction
         (Scalar (f p)) w (Tensor (Scalar (f p)) (M1 i c f p) w)))
-> (M1 i c f p -> w -> Tensor (Scalar (f p)) (M1 i c f p) w)
-> LinearFunction
     (Scalar (f p))
     (M1 i c f p)
     (LinearFunction
        (Scalar (f p)) w (Tensor (Scalar (f p)) (M1 i c f p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Gnrx.M1 f p
v) w
w
                      -> (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1
                           Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Tensor (Scalar (f p)) (f p) w
-> Tensor (Scalar (f p)) (M1 i c f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (f p))
  (f p)
  (LinearFunction (Scalar (f p)) w (Tensor (Scalar (f p)) (f p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar (f p))
  (f p)
  (LinearFunction (Scalar (f p)) w (Tensor (Scalar (f p)) (f p) w))
-> f p
-> LinearFunction (Scalar (f p)) w (Tensor (Scalar (f p)) (f p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
v)LinearFunction (Scalar (f p)) w (Tensor (Scalar (f p)) (f p) w)
-> w -> Tensor (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w
  transposeTensor :: (M1 i c f p ⊗ w) -+> (w ⊗ M1 i c f p)
transposeTensor = (M1 i c f p ⊗ w) -+> (w ⊗ M1 i c f p)
forall w.
(TensorSpace w, Scalar w ~ Scalar (f p)) =>
(M1 i c f p ⊗ w) -+> (w ⊗ M1 i c f p)
tT
   where tT ::  w . (TensorSpace w, Scalar w ~ Scalar (f p))
                => (Gnrx.M1 i c f p  w) -+> (w  Gnrx.M1 i c f p)
         tT :: (M1 i c f p ⊗ w) -+> (w ⊗ M1 i c f p)
tT = (Tensor (Scalar (f p)) (M1 i c f p) w
 -> Tensor (Scalar (f p)) w (M1 i c f p))
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) w (M1 i c f p))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
           ((Tensor (Scalar (f p)) (M1 i c f p) w
  -> Tensor (Scalar (f p)) w (M1 i c f p))
 -> LinearFunction
      (Scalar (f p))
      (Tensor (Scalar (f p)) (M1 i c f p) w)
      (Tensor (Scalar (f p)) w (M1 i c f p)))
-> (Tensor (Scalar (f p)) (M1 i c f p) w
    -> Tensor (Scalar (f p)) w (M1 i c f p))
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) w (M1 i c f p))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor (Scalar w) w (f p)) (Tensor (Scalar (f p)) w (M1 i c f p))
-> Tensor (Scalar w) w (f p)
-> Tensor (Scalar (f p)) w (M1 i c f p)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (TensorProduct w (M1 i c f p))
  (Tensor (Scalar (f p)) w (M1 i c f p))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion Coercion
  (TensorProduct w (M1 i c f p))
  (Tensor (Scalar (f p)) w (M1 i c f p))
-> Coercion
     (Tensor (Scalar w) w (f p)) (TensorProduct w (M1 i c f p))
-> Coercion
     (Tensor (Scalar w) w (f p)) (Tensor (Scalar (f p)) w (M1 i c f p))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. [w]
-> Coercion (f p) (M1 i c f p)
-> Coercion (TensorProduct w (f p)) (TensorProduct w (M1 i c f p))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[w])
                                (Coercion (f p) (M1 i c f p)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion (f p) (Gnrx.M1 i c f p)) Coercion (TensorProduct w (f p)) (TensorProduct w (M1 i c f p))
-> Coercion (Tensor (Scalar w) w (f p)) (TensorProduct w (f p))
-> Coercion
     (Tensor (Scalar w) w (f p)) (TensorProduct w (M1 i c f p))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor (Scalar w) w (f p)) (TensorProduct w (f p))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion)
              (Tensor (Scalar w) w (f p) -> Tensor (Scalar (f p)) w (M1 i c f p))
-> (Tensor (Scalar (f p)) (M1 i c f p) w
    -> Tensor (Scalar w) w (f p))
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Tensor (Scalar (f p)) w (M1 i c f p)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar (f p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar w) w (f p))
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar w) w (f p)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (f p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar w) w (f p))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor (Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar w) w (f p))
-> (Tensor (Scalar (f p)) (M1 i c f p) w
    -> Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Tensor (Scalar w) w (f p)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Tensor (Scalar (f p)) (f p) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1)
  fmapTensor :: Bilinear (w -+> x) (M1 i c f p ⊗ w) (M1 i c f p ⊗ x)
fmapTensor = ((w -+> x)
 -> LinearFunction
      (Scalar (f p))
      (Tensor (Scalar (f p)) (M1 i c f p) w)
      (Tensor (Scalar (f p)) (M1 i c f p) x))
-> LinearFunction
     (Scalar (f p))
     (w -+> x)
     (LinearFunction
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((w -+> x)
  -> LinearFunction
       (Scalar (f p))
       (Tensor (Scalar (f p)) (M1 i c f p) w)
       (Tensor (Scalar (f p)) (M1 i c f p) x))
 -> LinearFunction
      (Scalar (f p))
      (w -+> x)
      (LinearFunction
         (Scalar (f p))
         (Tensor (Scalar (f p)) (M1 i c f p) w)
         (Tensor (Scalar (f p)) (M1 i c f p) x)))
-> ((w -+> x)
    -> LinearFunction
         (Scalar (f p))
         (Tensor (Scalar (f p)) (M1 i c f p) w)
         (Tensor (Scalar (f p)) (M1 i c f p) x))
-> LinearFunction
     (Scalar (f p))
     (w -+> x)
     (LinearFunction
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \w -+> x
f -> (f p -> M1 i c f p)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) x)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1 (LinearFunction
  (Scalar (f p))
  (w -+> x)
  (LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (f p))
  (w -+> x)
  (LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)
  fzipTensorWith :: Bilinear
  ((w, x) -+> u) (M1 i c f p ⊗ w, M1 i c f p ⊗ x) (M1 i c f p ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor (Scalar (f p)) (M1 i c f p) w,
     Tensor (Scalar (f p)) (M1 i c f p) x)
 -> Tensor (Scalar (f p)) (M1 i c f p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (f p)) (M1 i c f p) w,
         Tensor (Scalar (f p)) (M1 i c f p) x)
        (Tensor (Scalar (f p)) (M1 i c f p) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((((w, x) -+> u)
  -> (Tensor (Scalar (f p)) (M1 i c f p) w,
      Tensor (Scalar (f p)) (M1 i c f p) x)
  -> Tensor (Scalar (f p)) (M1 i c f p) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar (f p)) (M1 i c f p) w,
          Tensor (Scalar (f p)) (M1 i c f p) x)
         (Tensor (Scalar (f p)) (M1 i c f p) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar (f p)) (M1 i c f p) w,
        Tensor (Scalar (f p)) (M1 i c f p) x)
    -> Tensor (Scalar (f p)) (M1 i c f p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (f p)) (M1 i c f p) w,
         Tensor (Scalar (f p)) (M1 i c f p) x)
        (Tensor (Scalar (f p)) (M1 i c f p) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \(w, x) -+> u
f (Tensor (Scalar (f p)) (M1 i c f p) w
wt, Tensor (Scalar (f p)) (M1 i c f p) x
xt) -> (f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) u)
     (Tensor (Scalar (f p)) (M1 i c f p) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1
                        Coercion
  (Tensor (Scalar (f p)) (f p) u)
  (Tensor (Scalar (f p)) (M1 i c f p) u)
-> Tensor (Scalar (f p)) (f p) u
-> Tensor (Scalar (f p)) (M1 i c f p) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (f p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (f p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)
                         LinearFunction
  (Scalar (f p))
  (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
  (Tensor (Scalar (f p)) (f p) u)
-> (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
-> Tensor (Scalar (f p)) (f p) u
forall s v w. LinearFunction s v w -> v -> w
-+$>( (M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1 Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (M1 i c f p) w
-> Tensor (Scalar (f p)) (f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (M1 i c f p) w
wt
                             , (M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) x)
     (Tensor (Scalar (f p)) (f p) x)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1 Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) x)
  (Tensor (Scalar (f p)) (f p) x)
-> Tensor (Scalar (f p)) (M1 i c f p) x
-> Tensor (Scalar (f p)) (f p) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (M1 i c f p) x
xt )
  coerceFmapTensorProduct :: p (M1 i c f p)
-> Coercion a b
-> Coercion
     (TensorProduct (M1 i c f p) a) (TensorProduct (M1 i c f p) b)
coerceFmapTensorProduct = p (M1 i c f p)
-> Coercion a b
-> Coercion
     (TensorProduct (M1 i c f p) a) (TensorProduct (M1 i c f p) b)
forall (p :: * -> *) a b.
Functor p =>
p (M1 i c f p)
-> Coercion a b
-> Coercion
     (TensorProduct (M1 i c f p) a) (TensorProduct (M1 i c f p) b)
cmtp
   where cmtp ::   a b . Hask.Functor 
             =>  (Gnrx.M1 i c f p) -> Coercion a b
               -> Coercion (TensorProduct (Gnrx.M1 i c f p) a)
                           (TensorProduct (Gnrx.M1 i c f p) b)
         cmtp :: ぴ (M1 i c f p)
-> Coercion a b
-> Coercion
     (TensorProduct (M1 i c f p) a) (TensorProduct (M1 i c f p) b)
cmtp ぴ (M1 i c f p)
p Coercion a b
crc = case [f p]
-> Coercion a b
-> Coercion (TensorProduct (f p) a) (TensorProduct (f p) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[f p]) Coercion a b
crc of
                  Coercion (TensorProduct (f p) a) (TensorProduct (f p) b)
Coercion -> Coercion
  (TensorProduct (M1 i c f p) a) (TensorProduct (M1 i c f p) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance  f g p . ( TensorSpace (f p), TensorSpace (g p), Scalar (f p) ~ Scalar (g p) )
                       => TensorSpace ((f:*:g) p) where
  type TensorProduct ((f:*:g) p) w = (f pw, g pw)
  scalarSpaceWitness :: ScalarSpaceWitness ((:*:) f g p)
scalarSpaceWitness = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                            , ScalarSpaceWitness (g p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, ScalarSpaceWitness (g p)
ScalarSpaceWitness) -> ScalarSpaceWitness ((:*:) f g p)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness ((:*:) f g p)
linearManifoldWitness = LinearManifoldWitness ((:*:) f g p)
forall a. a
genericTensorspaceError
  zeroTensor :: (:*:) f g p ⊗ w
zeroTensor = TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar (g p)) (f p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor, Tensor (Scalar (g p)) (g p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor)
  scaleTensor :: Bilinear (Scalar ((:*:) f g p)) ((:*:) f g p ⊗ w) ((:*:) f g p ⊗ w)
scaleTensor = (Scalar (g p)
 -> Tensor (Scalar (g p)) ((:*:) f g p) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> Bilinear
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((Scalar (g p)
  -> Tensor (Scalar (g p)) ((:*:) f g p) w
  -> Tensor (Scalar (g p)) ((:*:) f g p) w)
 -> Bilinear
      (Scalar (g p))
      (Tensor (Scalar (g p)) ((:*:) f g p) w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> (Scalar (g p)
    -> Tensor (Scalar (g p)) ((:*:) f g p) w
    -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> Bilinear
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar (g p)
μ (Tensor (v,w)) ->
                 TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( (LinearFunction
  (Scalar (Scalar (g p)))
  (Scalar (g p))
  (LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar (g p)))
  (Scalar (g p))
  (LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w))
-> Scalar (g p)
-> LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar (g p)
μ)LinearFunction
  (Scalar (Scalar (g p)))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) w
v, (LinearFunction
  (Scalar (Scalar (g p)))
  (Scalar (g p))
  (LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar (g p)))
  (Scalar (g p))
  (LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) w))
-> Scalar (g p)
-> LinearFunction
     (Scalar (Scalar (g p)))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar (g p)
μ)LinearFunction
  (Scalar (Scalar (g p)))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar (g p)) (g p) w)
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar (g p)) (g p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) w
w )
  negateTensor :: ((:*:) f g p ⊗ w) -+> ((:*:) f g p ⊗ w)
negateTensor = (Tensor (Scalar (g p)) ((:*:) f g p) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar (g p)) ((:*:) f g p) w
  -> Tensor (Scalar (g p)) ((:*:) f g p) w)
 -> LinearFunction
      (Scalar (g p))
      (Tensor (Scalar (g p)) ((:*:) f g p) w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> (Tensor (Scalar (g p)) ((:*:) f g p) w
    -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (v,w))
          -> TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensorLinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) w
v, LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar (g p)) (g p) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensorLinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar (g p)) (g p) w)
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar (g p)) (g p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) w
w)
  addTensors :: ((:*:) f g p ⊗ w) -> ((:*:) f g p ⊗ w) -> (:*:) f g p ⊗ w
addTensors (Tensor (fu, fv)) (Tensor (fu', fv'))
           = TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar (g p)) (f p) w
fu Tensor (Scalar (g p)) (f p) w
-> Tensor (Scalar (g p)) (f p) w -> Tensor (Scalar (g p)) (f p) w
forall v. AdditiveGroup v => v -> v -> v
^+^ Tensor (Scalar (g p)) (f p) w
fu', Tensor (Scalar (g p)) (g p) w
fv Tensor (Scalar (g p)) (g p) w
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar (g p)) (g p) w
forall v. AdditiveGroup v => v -> v -> v
^+^ Tensor (Scalar (g p)) (g p) w
fv')
  subtractTensors :: ((:*:) f g p ⊗ w) -> ((:*:) f g p ⊗ w) -> (:*:) f g p ⊗ w
subtractTensors (Tensor (fu, fv)) (Tensor (fu', fv'))
          = TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar (g p)) (f p) w
fu Tensor (Scalar (g p)) (f p) w
-> Tensor (Scalar (g p)) (f p) w -> Tensor (Scalar (g p)) (f p) w
forall v. AdditiveGroup v => v -> v -> v
^-^ Tensor (Scalar (g p)) (f p) w
fu', Tensor (Scalar (g p)) (g p) w
fv Tensor (Scalar (g p)) (g p) w
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar (g p)) (g p) w
forall v. AdditiveGroup v => v -> v -> v
^-^ Tensor (Scalar (g p)) (g p) w
fv')
  toFlatTensor :: (:*:) f g p -+> ((:*:) f g p ⊗ Scalar ((:*:) f g p))
toFlatTensor = ((:*:) f g p -> Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
-> LinearFunction
     (Scalar (g p))
     ((:*:) f g p)
     (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
      (((:*:) f g p
  -> Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
 -> LinearFunction
      (Scalar (g p))
      ((:*:) f g p)
      (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p))))
-> ((:*:) f g p
    -> Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
-> LinearFunction
     (Scalar (g p))
     ((:*:) f g p)
     (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(f p
u:*:g p
v) -> TensorProduct ((:*:) f g p) (Scalar (g p))
-> Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p))
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearFunction
  (Scalar (g p)) (f p) (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensorLinearFunction
  (Scalar (g p)) (f p) (Tensor (Scalar (f p)) (f p) (Scalar (f p)))
-> f p -> Tensor (Scalar (f p)) (f p) (Scalar (f p))
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
u, LinearFunction
  (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (g p) (Scalar (g p)))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensorLinearFunction
  (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (g p) (Scalar (g p)))
-> g p -> Tensor (Scalar (g p)) (g p) (Scalar (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>g p
v)
  fromFlatTensor :: ((:*:) f g p ⊗ Scalar ((:*:) f g p)) -+> (:*:) f g p
fromFlatTensor = (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)) -> (:*:) f g p)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
     ((:*:) f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
      ((Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p))
  -> (:*:) f g p)
 -> LinearFunction
      (Scalar (g p))
      (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
      ((:*:) f g p))
-> (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p))
    -> (:*:) f g p)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) (Scalar (g p)))
     ((:*:) f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (u,v)) -> (LinearFunction
  (Scalar (g p)) (Tensor (Scalar (f p)) (f p) (Scalar (f p))) (f p)
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensorLinearFunction
  (Scalar (g p)) (Tensor (Scalar (f p)) (f p) (Scalar (f p))) (f p)
-> Tensor (Scalar (f p)) (f p) (Scalar (f p)) -> f p
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) (Scalar (f p))
u)f p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:(LinearFunction
  (Scalar (g p)) (Tensor (Scalar (g p)) (g p) (Scalar (g p))) (g p)
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensorLinearFunction
  (Scalar (g p)) (Tensor (Scalar (g p)) (g p) (Scalar (g p))) (g p)
-> Tensor (Scalar (g p)) (g p) (Scalar (g p)) -> g p
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) (Scalar (g p))
v)
  tensorProduct :: Bilinear ((:*:) f g p) w ((:*:) f g p ⊗ w)
tensorProduct = ((:*:) f g p -> w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (f p))
     ((:*:) f g p)
     (LinearFunction
        (Scalar (f p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((:*:) f g p -> w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
 -> LinearFunction
      (Scalar (f p))
      ((:*:) f g p)
      (LinearFunction
         (Scalar (f p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)))
-> ((:*:) f g p -> w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (f p))
     ((:*:) f g p)
     (LinearFunction
        (Scalar (f p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(f p
u:*:g p
v) w
w ->
      TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((LinearFunction
  (Scalar (g p))
  (f p)
  (LinearFunction (Scalar (g p)) w (Tensor (Scalar (f p)) (f p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar (g p))
  (f p)
  (LinearFunction (Scalar (g p)) w (Tensor (Scalar (f p)) (f p) w))
-> f p
-> LinearFunction (Scalar (g p)) w (Tensor (Scalar (f p)) (f p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
u)LinearFunction (Scalar (g p)) w (Tensor (Scalar (f p)) (f p) w)
-> w -> Tensor (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w, (LinearFunction
  (Scalar (g p))
  (g p)
  (LinearFunction (Scalar (g p)) w (Tensor (Scalar (g p)) (g p) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar (g p))
  (g p)
  (LinearFunction (Scalar (g p)) w (Tensor (Scalar (g p)) (g p) w))
-> g p
-> LinearFunction (Scalar (g p)) w (Tensor (Scalar (g p)) (g p) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>g p
v)LinearFunction (Scalar (g p)) w (Tensor (Scalar (g p)) (g p) w)
-> w -> Tensor (Scalar (g p)) (g p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w)
  transposeTensor :: ((:*:) f g p ⊗ w) -+> (w ⊗ (:*:) f g p)
transposeTensor = (Tensor (Scalar (g p)) ((:*:) f g p) w -> w ⊗ (:*:) f g p)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (w ⊗ (:*:) f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar (g p)) ((:*:) f g p) w -> w ⊗ (:*:) f g p)
 -> LinearFunction
      (Scalar (g p))
      (Tensor (Scalar (g p)) ((:*:) f g p) w)
      (w ⊗ (:*:) f g p))
-> (Tensor (Scalar (g p)) ((:*:) f g p) w -> w ⊗ (:*:) f g p)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (w ⊗ (:*:) f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (uw,vw))
        -> (LinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar (g p)) (f p, g p) ((:*:) f g p))
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar w) w (f p), Tensor (Scalar w) w (g p))
     (w ⊗ (:*:) f g p))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar (g p)) (f p, g p) ((:*:) f g p))
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar w) w (f p), Tensor (Scalar w) w (g p))
     (w ⊗ (:*:) f g p))
-> LinearFunction (Scalar (g p)) (f p, g p) ((:*:) f g p)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar w) w (f p), Tensor (Scalar w) w (g p))
     (w ⊗ (:*:) f g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>((f p, g p) -> (:*:) f g p)
-> LinearFunction (Scalar (g p)) (f p, g p) ((:*:) f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (\(f p
u,g p
v)->f p
uf p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:g p
v))
             LinearFunction
  (Scalar (g p))
  (Tensor (Scalar w) w (f p), Tensor (Scalar w) w (g p))
  (w ⊗ (:*:) f g p)
-> (Tensor (Scalar w) w (f p), Tensor (Scalar w) w (g p))
-> w ⊗ (:*:) f g p
forall s v w. LinearFunction s v w -> v -> w
-+$>(LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar w) w (f p))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar w) w (f p))
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar w) w (f p)
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) w
uw,LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar w) w (g p))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar w) w (g p))
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar w) w (g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) w
vw)
  fmapTensor :: Bilinear (w -+> x) ((:*:) f g p ⊗ w) ((:*:) f g p ⊗ x)
fmapTensor = ((w -+> x)
 -> Tensor (Scalar (g p)) ((:*:) f g p) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar (g p)) ((:*:) f g p) w)
        (Tensor (Scalar (g p)) ((:*:) f g p) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w -+> x)
  -> Tensor (Scalar (g p)) ((:*:) f g p) w
  -> Tensor (Scalar (g p)) ((:*:) f g p) x)
 -> LinearFunction
      (Scalar x)
      (w -+> x)
      (LinearFunction
         (Scalar x)
         (Tensor (Scalar (g p)) ((:*:) f g p) w)
         (Tensor (Scalar (g p)) ((:*:) f g p) x)))
-> ((w -+> x)
    -> Tensor (Scalar (g p)) ((:*:) f g p) w
    -> Tensor (Scalar (g p)) ((:*:) f g p) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar (g p)) ((:*:) f g p) w)
        (Tensor (Scalar (g p)) ((:*:) f g p) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
     \w -+> x
f (Tensor (uw,vw)) -> TensorProduct ((:*:) f g p) x
-> Tensor (Scalar (g p)) ((:*:) f g p) x
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((LinearFunction
  (Scalar (g p))
  (w -+> x)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (g p))
  (w -+> x)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) x)
-> Tensor (Scalar (f p)) (f p) w -> Tensor (Scalar (f p)) (f p) x
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) w
uw, (LinearFunction
  (Scalar (g p))
  (w -+> x)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (g p))
  (w -+> x)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w)
     (Tensor (Scalar (g p)) (g p) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w)
  (Tensor (Scalar (g p)) (g p) x)
-> Tensor (Scalar (g p)) (g p) w -> Tensor (Scalar (g p)) (g p) x
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) w
vw)
  fzipTensorWith :: Bilinear
  ((w, x) -+> u) ((:*:) f g p ⊗ w, (:*:) f g p ⊗ x) ((:*:) f g p ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor (Scalar (g p)) ((:*:) f g p) w,
     Tensor (Scalar (g p)) ((:*:) f g p) x)
 -> Tensor (Scalar (g p)) ((:*:) f g p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (g p)) ((:*:) f g p) w,
         Tensor (Scalar (g p)) ((:*:) f g p) x)
        (Tensor (Scalar (g p)) ((:*:) f g p) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction
               ((((w, x) -+> u)
  -> (Tensor (Scalar (g p)) ((:*:) f g p) w,
      Tensor (Scalar (g p)) ((:*:) f g p) x)
  -> Tensor (Scalar (g p)) ((:*:) f g p) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar (g p)) ((:*:) f g p) w,
          Tensor (Scalar (g p)) ((:*:) f g p) x)
         (Tensor (Scalar (g p)) ((:*:) f g p) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar (g p)) ((:*:) f g p) w,
        Tensor (Scalar (g p)) ((:*:) f g p) x)
    -> Tensor (Scalar (g p)) ((:*:) f g p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (g p)) ((:*:) f g p) w,
         Tensor (Scalar (g p)) ((:*:) f g p) x)
        (Tensor (Scalar (g p)) ((:*:) f g p) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(w, x) -+> u
f (Tensor (uw, vw), Tensor (ux, vx))
                      -> TensorProduct ((:*:) f g p) u
-> Tensor (Scalar (g p)) ((:*:) f g p) u
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( (LinearFunction
  (Scalar (g p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (g p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
     (Tensor (Scalar (f p)) (f p) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
  (Tensor (Scalar (f p)) (f p) u)
-> (Tensor (Scalar (f p)) (f p) w, Tensor (Scalar (f p)) (f p) x)
-> Tensor (Scalar (f p)) (f p) u
forall s v w. LinearFunction s v w -> v -> w
-+$>(Tensor (Scalar (f p)) (f p) w
uw,Tensor (Scalar (f p)) (f p) x
ux)
                                , (LinearFunction
  (Scalar (g p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w, Tensor (Scalar (g p)) (g p) x)
     (Tensor (Scalar (g p)) (g p) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (g p))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w, Tensor (Scalar (g p)) (g p) x)
     (Tensor (Scalar (g p)) (g p) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (g p))
     (Tensor (Scalar (g p)) (g p) w, Tensor (Scalar (g p)) (g p) x)
     (Tensor (Scalar (g p)) (g p) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)LinearFunction
  (Scalar (g p))
  (Tensor (Scalar (g p)) (g p) w, Tensor (Scalar (g p)) (g p) x)
  (Tensor (Scalar (g p)) (g p) u)
-> (Tensor (Scalar (g p)) (g p) w, Tensor (Scalar (g p)) (g p) x)
-> Tensor (Scalar (g p)) (g p) u
forall s v w. LinearFunction s v w -> v -> w
-+$>(Tensor (Scalar (g p)) (g p) w
vw,Tensor (Scalar (g p)) (g p) x
vx) )
  coerceFmapTensorProduct :: p ((:*:) f g p)
-> Coercion a b
-> Coercion
     (TensorProduct ((:*:) f g p) a) (TensorProduct ((:*:) f g p) b)
coerceFmapTensorProduct p ((:*:) f g p)
p Coercion a b
cab = case
             ( p (f p)
-> Coercion a b
-> Coercion (TensorProduct (f p) a) (TensorProduct (f p) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((\(f p
u:*:g p
_)->f p
u)((:*:) f g p -> f p) -> p ((:*:) f g p) -> p (f p)
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p ((:*:) f g p)
p) Coercion a b
cab
             , p (g p)
-> Coercion a b
-> Coercion (TensorProduct (g p) a) (TensorProduct (g p) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((\(f p
_:*:g p
v)->g p
v)((:*:) f g p -> g p) -> p ((:*:) f g p) -> p (g p)
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p ((:*:) f g p)
p) Coercion a b
cab ) of
          (Coercion (TensorProduct (f p) a) (TensorProduct (f p) b)
Coercion, Coercion (TensorProduct (g p) a) (TensorProduct (g p) b)
Coercion) -> Coercion
  (TensorProduct ((:*:) f g p) a) (TensorProduct ((:*:) f g p) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  wellDefinedVector :: (:*:) f g p -> Maybe ((:*:) f g p)
wellDefinedVector (f p
u:*:g p
v) = (f p -> g p -> (:*:) f g p)
-> Maybe (f p) -> Maybe (g p) -> Maybe ((:*:) f g p)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 f p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
(:*:) (f p -> Maybe (f p)
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector f p
u) (g p -> Maybe (g p)
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector g p
v)
  wellDefinedTensor :: ((:*:) f g p ⊗ w) -> Maybe ((:*:) f g p ⊗ w)
wellDefinedTensor (Tensor (u,v))
         = (Tensor (Scalar (g p)) (f p) w
 -> Tensor (Scalar (g p)) (g p) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> Maybe (Tensor (Scalar (g p)) (f p) w)
-> Maybe (Tensor (Scalar (g p)) (g p) w)
-> Maybe (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 (((Tensor (Scalar (g p)) (f p) w, Tensor (Scalar (g p)) (g p) w)
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor((Tensor (Scalar (g p)) (f p) w, Tensor (Scalar (g p)) (g p) w)
 -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> (Tensor (Scalar (g p)) (g p) w
    -> (Tensor (Scalar (g p)) (f p) w, Tensor (Scalar (g p)) (g p) w))
-> Tensor (Scalar (g p)) (g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
.) ((Tensor (Scalar (g p)) (g p) w
  -> (Tensor (Scalar (g p)) (f p) w, Tensor (Scalar (g p)) (g p) w))
 -> Tensor (Scalar (g p)) (g p) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> (Tensor (Scalar (g p)) (f p) w
    -> Tensor (Scalar (g p)) (g p) w
    -> (Tensor (Scalar (g p)) (f p) w, Tensor (Scalar (g p)) (g p) w))
-> Tensor (Scalar (g p)) (f p) w
-> Tensor (Scalar (g p)) (g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (,)) ((f p ⊗ w) -> Maybe (f p ⊗ w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor f p ⊗ w
Tensor (Scalar (g p)) (f p) w
u) (Tensor (Scalar (g p)) (g p) w
-> Maybe (Tensor (Scalar (g p)) (g p) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor Tensor (Scalar (g p)) (g p) w
v)


instance  m . ( Semimanifold m, TensorSpace (Needle (VRep m))
                               , Scalar (Needle m) ~ Scalar (Needle (VRep m)) )
                  => TensorSpace (GenericNeedle m) where
  type TensorProduct (GenericNeedle m) w = TensorProduct (Needle (VRep m)) w
  wellDefinedVector :: GenericNeedle m -> Maybe (GenericNeedle m)
wellDefinedVector = (Needle (VRep m) -> GenericNeedle m)
-> Maybe (Needle (VRep m)) -> Maybe (GenericNeedle m)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle (Maybe (Needle (VRep m)) -> Maybe (GenericNeedle m))
-> (GenericNeedle m -> Maybe (Needle (VRep m)))
-> GenericNeedle m
-> Maybe (GenericNeedle m)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Needle (VRep m) -> Maybe (Needle (VRep m))
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector (Needle (VRep m) -> Maybe (Needle (VRep m)))
-> (GenericNeedle m -> Needle (VRep m))
-> GenericNeedle m
-> Maybe (Needle (VRep m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle
  wellDefinedTensor :: (GenericNeedle m ⊗ w) -> Maybe (GenericNeedle m ⊗ w)
wellDefinedTensor = Coercion
  (Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
  (Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
-> Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Coercion
     (Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
     (Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
   (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
   (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
 -> Coercion
      (Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
      (Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)))
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Coercion
     (Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
     (Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle)
                         (Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
 -> Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
-> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
    -> Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Maybe (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
 -> Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
-> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
    -> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Maybe (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle)
  scalarSpaceWitness :: ScalarSpaceWitness (GenericNeedle m)
scalarSpaceWitness = case ScalarSpaceWitness (Needle (VRep m))
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness
                               :: ScalarSpaceWitness (Needle (VRep m)) of
          ScalarSpaceWitness (Needle (VRep m))
ScalarSpaceWitness -> ScalarSpaceWitness (GenericNeedle m)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (GenericNeedle m)
linearManifoldWitness = case LinearManifoldWitness (Needle (VRep m))
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness
                               :: LinearManifoldWitness (Needle (VRep m)) of
          LinearManifoldWitness (Needle (VRep m))
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
           BoundarylessWitness
#endif
              -> LinearManifoldWitness (GenericNeedle m)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
                  BoundarylessWitness
#endif
  zeroTensor :: GenericNeedle m ⊗ w
zeroTensor = (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  toFlatTensor :: GenericNeedle m -+> (GenericNeedle m ⊗ Scalar (GenericNeedle m))
toFlatTensor = (GenericNeedle m
 -> Tensor
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (Scalar (Needle (VRep m))))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((GenericNeedle m
  -> Tensor
       (Scalar (Needle (VRep m)))
       (GenericNeedle m)
       (Scalar (Needle (VRep m))))
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (Tensor
         (Scalar (Needle (VRep m)))
         (GenericNeedle m)
         (Scalar (Needle (VRep m)))))
-> (GenericNeedle m
    -> Tensor
         (Scalar (Needle (VRep m)))
         (GenericNeedle m)
         (Scalar (Needle (VRep m))))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
  (Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m))))
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
-> Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor
        (Scalar (Needle (VRep m)))
        (Needle (VRep m))
        (Scalar (Needle (VRep m))))
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle)
                             (Tensor
   (Scalar (Needle (VRep m)))
   (Needle (VRep m))
   (Scalar (Needle (VRep m)))
 -> Tensor
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (Scalar (Needle (VRep m))))
-> (GenericNeedle m
    -> Tensor
         (Scalar (Needle (VRep m)))
         (Needle (VRep m))
         (Scalar (Needle (VRep m))))
-> GenericNeedle m
-> Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar (Needle (VRep m)))
  (Needle (VRep m))
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
-> Needle (VRep m)
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (Needle (VRep m)))
  (Needle (VRep m))
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
                             (Needle (VRep m)
 -> Tensor
      (Scalar (Needle (VRep m)))
      (Needle (VRep m))
      (Scalar (Needle (VRep m))))
-> (GenericNeedle m -> Needle (VRep m))
-> GenericNeedle m
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle
  fromFlatTensor :: (GenericNeedle m ⊗ Scalar (GenericNeedle m)) -+> GenericNeedle m
fromFlatTensor = (Tensor
   (Scalar (Needle (VRep m)))
   (GenericNeedle m)
   (Scalar (Needle (VRep m)))
 -> GenericNeedle m)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
     (GenericNeedle m)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor
    (Scalar (Needle (VRep m)))
    (GenericNeedle m)
    (Scalar (Needle (VRep m)))
  -> GenericNeedle m)
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (Tensor
         (Scalar (Needle (VRep m)))
         (GenericNeedle m)
         (Scalar (Needle (VRep m))))
      (GenericNeedle m))
-> (Tensor
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (Scalar (Needle (VRep m)))
    -> GenericNeedle m)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
     (GenericNeedle m)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m))))
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
-> Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m)))
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor
        (Scalar (Needle (VRep m)))
        (GenericNeedle m)
        (Scalar (Needle (VRep m))))
     (Tensor
        (Scalar (Needle (VRep m)))
        (Needle (VRep m))
        (Scalar (Needle (VRep m))))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle)
                             (Tensor
   (Scalar (Needle (VRep m)))
   (GenericNeedle m)
   (Scalar (Needle (VRep m)))
 -> Tensor
      (Scalar (Needle (VRep m)))
      (Needle (VRep m))
      (Scalar (Needle (VRep m))))
-> (Tensor
      (Scalar (Needle (VRep m)))
      (Needle (VRep m))
      (Scalar (Needle (VRep m)))
    -> GenericNeedle m)
-> Tensor
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (Scalar (Needle (VRep m)))
-> GenericNeedle m
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
  (Needle (VRep m))
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
-> Needle (VRep m)
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m))))
  (Needle (VRep m))
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
                             (Tensor
   (Scalar (Needle (VRep m)))
   (Needle (VRep m))
   (Scalar (Needle (VRep m)))
 -> Needle (VRep m))
-> (Needle (VRep m) -> GenericNeedle m)
-> Tensor
     (Scalar (Needle (VRep m)))
     (Needle (VRep m))
     (Scalar (Needle (VRep m)))
-> GenericNeedle m
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle
  addTensors :: (GenericNeedle m ⊗ w)
-> (GenericNeedle m ⊗ w) -> GenericNeedle m ⊗ w
addTensors (Tensor TensorProduct (GenericNeedle m) w
s) (Tensor TensorProduct (GenericNeedle m) w
t)
       = (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
addTensors (TensorProduct (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (Needle (VRep m)) w
TensorProduct (GenericNeedle m) w
s) (TensorProduct (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (Needle (VRep m)) w
TensorProduct (GenericNeedle m) w
t)
  subtractTensors :: (GenericNeedle m ⊗ w)
-> (GenericNeedle m ⊗ w) -> GenericNeedle m ⊗ w
subtractTensors (Tensor TensorProduct (GenericNeedle m) w
s) (Tensor TensorProduct (GenericNeedle m) w
t)
       = (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall v w.
(TensorSpace v, TensorSpace v, TensorSpace w,
 Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
subtractTensors (TensorProduct (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (Needle (VRep m)) w
TensorProduct (GenericNeedle m) w
s) (TensorProduct (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (Needle (VRep m)) w
TensorProduct (GenericNeedle m) w
t)
  scaleTensor :: Bilinear
  (Scalar (GenericNeedle m))
  (GenericNeedle m ⊗ w)
  (GenericNeedle m ⊗ w)
scaleTensor = (Scalar (Needle (VRep m))
 -> LinearFunction
      (Scalar (Scalar (Needle (VRep m))))
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Scalar (Needle (VRep m)))
     (LinearFunction
        (Scalar (Scalar (Needle (VRep m))))
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Scalar (Needle (VRep m))
  -> LinearFunction
       (Scalar (Scalar (Needle (VRep m))))
       (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
       (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
 -> LinearFunction
      (Scalar (Scalar (Needle (VRep m))))
      (Scalar (Needle (VRep m)))
      (LinearFunction
         (Scalar (Scalar (Needle (VRep m))))
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)))
-> (Scalar (Needle (VRep m))
    -> LinearFunction
         (Scalar (Scalar (Needle (VRep m))))
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Scalar (Needle (VRep m)))
     (LinearFunction
        (Scalar (Scalar (Needle (VRep m))))
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar (Needle (VRep m))
μ -> (Needle (VRep m) -> GenericNeedle m)
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle
                                         (LinearFunction
   (Scalar (Scalar (Needle (VRep m))))
   (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
   (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
 -> LinearFunction
      (Scalar (Scalar (Needle (VRep m))))
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (Scalar (Needle (VRep m))))
  (Scalar (Needle (VRep m)))
  (LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar (Needle (VRep m))))
  (Scalar (Needle (VRep m)))
  (LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
-> Scalar (Needle (VRep m))
-> LinearFunction
     (Scalar (Scalar (Needle (VRep m))))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar (Needle (VRep m))
μ
  negateTensor :: (GenericNeedle m ⊗ w) -+> (GenericNeedle m ⊗ w)
negateTensor = (Needle (VRep m) -> GenericNeedle m)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensor
  tensorProduct :: Bilinear (GenericNeedle m) w (GenericNeedle m ⊗ w)
tensorProduct = (GenericNeedle m
 -> w -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (LinearFunction
        (Scalar (Needle (VRep m)))
        w
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericNeedle m
  -> w -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (LinearFunction
         (Scalar (Needle (VRep m)))
         w
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)))
-> (GenericNeedle m
    -> w -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (LinearFunction
        (Scalar (Needle (VRep m)))
        w
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericNeedle Needle (VRep m)
v) w
w
                      -> (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle
                           Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (Needle (VRep m)))
  (Needle (VRep m))
  (LinearFunction
     (Scalar (Needle (VRep m)))
     w
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar (Needle (VRep m)))
  (Needle (VRep m))
  (LinearFunction
     (Scalar (Needle (VRep m)))
     w
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w))
-> Needle (VRep m)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     w
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Needle (VRep m)
v)LinearFunction
  (Scalar (Needle (VRep m)))
  w
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> w -> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w
  transposeTensor :: (GenericNeedle m ⊗ w) -+> (w ⊗ GenericNeedle m)
transposeTensor = (GenericNeedle m ⊗ w) -+> (w ⊗ GenericNeedle m)
forall w.
(TensorSpace w, Scalar w ~ Scalar (Needle m)) =>
(GenericNeedle m ⊗ w) -+> (w ⊗ GenericNeedle m)
tT
   where tT ::  w . (TensorSpace w, Scalar w ~ Scalar (Needle m))
                => (GenericNeedle m  w) -+> (w  GenericNeedle m)
         tT :: (GenericNeedle m ⊗ w) -+> (w ⊗ GenericNeedle m)
tT = (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
 -> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
           ((Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
  -> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
      (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m)))
-> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
    -> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor (Scalar w) w (Needle (VRep m)))
  (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
-> Tensor (Scalar w) w (Needle (VRep m))
-> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (TensorProduct w (GenericNeedle m))
  (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion Coercion
  (TensorProduct w (GenericNeedle m))
  (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
-> Coercion
     (Tensor (Scalar w) w (Needle (VRep m)))
     (TensorProduct w (GenericNeedle m))
-> Coercion
     (Tensor (Scalar w) w (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. [w]
-> Coercion (Needle (VRep m)) (GenericNeedle m)
-> Coercion
     (TensorProduct w (Needle (VRep m)))
     (TensorProduct w (GenericNeedle m))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[w])
                              (Coercion (Needle (VRep m)) (GenericNeedle m)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion (Needle (VRep m))
                                                    (GenericNeedle m)) Coercion
  (TensorProduct w (Needle (VRep m)))
  (TensorProduct w (GenericNeedle m))
-> Coercion
     (Tensor (Scalar w) w (Needle (VRep m)))
     (TensorProduct w (Needle (VRep m)))
-> Coercion
     (Tensor (Scalar w) w (Needle (VRep m)))
     (TensorProduct w (GenericNeedle m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar w) w (Needle (VRep m)))
  (TensorProduct w (Needle (VRep m)))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion)
              (Tensor (Scalar w) w (Needle (VRep m))
 -> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m))
-> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
    -> Tensor (Scalar w) w (Needle (VRep m)))
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Tensor (Scalar (Needle (VRep m))) w (GenericNeedle m)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar w) w (Needle (VRep m)))
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
-> Tensor (Scalar w) w (Needle (VRep m))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
  (Tensor (Scalar w) w (Needle (VRep m)))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
 -> Tensor (Scalar w) w (Needle (VRep m)))
-> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
    -> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Tensor (Scalar w) w (Needle (VRep m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle)
  fmapTensor :: Bilinear (w -+> x) (GenericNeedle m ⊗ w) (GenericNeedle m ⊗ x)
fmapTensor = ((w -+> x)
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
      (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (w -+> x)
     (LinearFunction
        (Scalar (Needle (VRep m)))
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((w -+> x)
  -> LinearFunction
       (Scalar (Needle (VRep m)))
       (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
       (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x))
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (w -+> x)
      (LinearFunction
         (Scalar (Needle (VRep m)))
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)))
-> ((w -+> x)
    -> LinearFunction
         (Scalar (Needle (VRep m)))
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x))
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (w -+> x)
     (LinearFunction
        (Scalar (Needle (VRep m)))
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \w -+> x
f -> (Needle (VRep m) -> GenericNeedle m)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle (LinearFunction
  (Scalar (Needle (VRep m)))
  (w -+> x)
  (LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (Needle (VRep m)))
  (w -+> x)
  (LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (GenericNeedle m ⊗ w, GenericNeedle m ⊗ x)
  (GenericNeedle m ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
     Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
 -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
         Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((((w, x) -+> u)
  -> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
      Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
  -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
          Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
         (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
        Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
    -> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w,
         Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
        (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \(w, x) -+> u
f (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
wt, Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x
xt) -> (Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u)
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle
                        Coercion
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u)
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (Needle (VRep m)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w,
      Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (Needle (VRep m)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w,
      Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w,
      Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)
                         LinearFunction
  (Scalar (Needle (VRep m)))
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w,
   Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u)
-> (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w,
    Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u
forall s v w. LinearFunction s v w -> v -> w
-+$>( (GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle Coercion
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) w
wt
                             , (GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle Coercion
  (Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x)
  (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x)
-> Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x
-> Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (Needle (VRep m))) (GenericNeedle m) x
xt )
  coerceFmapTensorProduct :: p (GenericNeedle m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle m) a)
     (TensorProduct (GenericNeedle m) b)
coerceFmapTensorProduct = p (GenericNeedle m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle m) a)
     (TensorProduct (GenericNeedle m) b)
forall (p :: * -> *) a b.
Functor p =>
p (GenericNeedle m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle m) a)
     (TensorProduct (GenericNeedle m) b)
cmtp
   where cmtp ::  p a b . Hask.Functor p
             => p (GenericNeedle m) -> Coercion a b
               -> Coercion (TensorProduct (GenericNeedle m) a)
                           (TensorProduct (GenericNeedle m) b)
         cmtp :: p (GenericNeedle m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle m) a)
     (TensorProduct (GenericNeedle m) b)
cmtp p (GenericNeedle m)
p Coercion a b
crc = case [Needle (VRep m)]
-> Coercion a b
-> Coercion
     (TensorProduct (Needle (VRep m)) a)
     (TensorProduct (Needle (VRep m)) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[Needle (VRep m)]) Coercion a b
crc of
                  Coercion
  (TensorProduct (Needle (VRep m)) a)
  (TensorProduct (Needle (VRep m)) b)
Coercion -> Coercion
  (TensorProduct (GenericNeedle m) a)
  (TensorProduct (GenericNeedle m) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion

instance (LinearSpace v, Num (Scalar v)) => LinearSpace (Gnrx.Rec0 v s) where
  type DualVector (Gnrx.Rec0 v s) = DualVector v
  dualSpaceWitness :: DualSpaceWitness (Rec0 v s)
dualSpaceWitness = DualSpaceWitness (Rec0 v s)
forall a. a
genericTensorspaceError
  linearId :: Rec0 v s +> Rec0 v s
linearId = (Rec0 v s -> v)
-> Coercion
     (LinearMap (Scalar v) v (Rec0 v s))
     (LinearMap (Scalar v) (Rec0 v s) (Rec0 v s))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1
                Coercion
  (LinearMap (Scalar v) v (Rec0 v s))
  (LinearMap (Scalar v) (Rec0 v s) (Rec0 v s))
-> Coercion
     (LinearMap (Scalar v) v v) (LinearMap (Scalar v) v (Rec0 v s))
-> Coercion
     (LinearMap (Scalar v) v v)
     (LinearMap (Scalar v) (Rec0 v s) (Rec0 v s))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion v (Rec0 v s)
-> Coercion
     (LinearMap (Scalar v) v v) (LinearMap (Scalar v) v (Rec0 v s))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((v -> Rec0 v s) -> Coercion v (Rec0 v s)
forall (k :: * -> * -> *) a b (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible a b, Object k a, Object k b) =>
p a b -> k a b
follow v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1) Coercion
  (LinearMap (Scalar v) v v)
  (LinearMap (Scalar v) (Rec0 v s) (Rec0 v s))
-> LinearMap (Scalar v) v v
-> LinearMap (Scalar v) (Rec0 v s) (Rec0 v s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar v) v v
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  applyDualVector :: Bilinear (DualVector (Rec0 v s)) (Rec0 v s) (Scalar (Rec0 v s))
applyDualVector = (DualVector v -> Rec0 v s -> Scalar v)
-> Bilinear (DualVector v) (Rec0 v s) (Scalar v)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((DualVector v -> Rec0 v s -> Scalar v)
 -> Bilinear (DualVector v) (Rec0 v s) (Scalar v))
-> (DualVector v -> Rec0 v s -> Scalar v)
-> Bilinear (DualVector v) (Rec0 v s) (Scalar v)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \DualVector v
dv (Gnrx.K1 v
v) -> (LinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (LinearFunction (Scalar (DualVector v)) v (Scalar v))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (DualVector v))
  (DualVector v)
  (LinearFunction (Scalar (DualVector v)) v (Scalar v))
-> DualVector v
-> LinearFunction (Scalar (DualVector v)) v (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector v
dv)LinearFunction (Scalar (DualVector v)) v (Scalar v)
-> v -> Scalar v
forall s v w. LinearFunction s v w -> v -> w
-+$>v
v
  applyLinear :: Bilinear (Rec0 v s +> w) (Rec0 v s) w
applyLinear = (LinearMap (Scalar v) (Rec0 v s) w -> Rec0 v s -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Rec0 v s) w)
     (LinearFunction (Scalar v) (Rec0 v s) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar v) (Rec0 v s) w -> Rec0 v s -> w)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (Rec0 v s) w)
      (LinearFunction (Scalar v) (Rec0 v s) w))
-> (LinearMap (Scalar v) (Rec0 v s) w -> Rec0 v s -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Rec0 v s) w)
     (LinearFunction (Scalar v) (Rec0 v s) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Rec0 v s)) w
f) (Gnrx.K1 v
v)
                      -> (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v w)
  (LinearFunction (Scalar v) v w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v w)
  (LinearFunction (Scalar v) v w)
-> LinearMap (Scalar v) v w -> LinearFunction (Scalar v) v w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector v) w -> LinearMap (Scalar v) v w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector v) w
TensorProduct (DualVector (Rec0 v s)) w
f)LinearFunction (Scalar v) v w -> v -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>v
v
  tensorId :: (Rec0 v s ⊗ w) +> (Rec0 v s ⊗ w)
tensorId = Coercion (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
-> Coercion
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) v w)
        (Tensor (Scalar v) (Rec0 v s) w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) w))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap ((Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) w) (Tensor (Scalar v) v w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1)
                Coercion
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) v w)
     (Tensor (Scalar v) (Rec0 v s) w))
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w))
-> Coercion
     (LinearMap
        (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) v w)
        (Tensor (Scalar v) (Rec0 v s) w))
-> Coercion
     (LinearMap
        (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) (Rec0 v s) w)
        (Tensor (Scalar v) (Rec0 v s) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
-> Coercion
     (LinearMap
        (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w))
     (LinearMap
        (Scalar v)
        (Tensor (Scalar v) v w)
        (Tensor (Scalar v) (Rec0 v s) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((v -> Rec0 v s)
-> Coercion
     (Tensor (Scalar v) v w) (Tensor (Scalar v) (Rec0 v s) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS v -> Rec0 v s
forall k i c (p :: k). c -> K1 i c p
Gnrx.K1) Coercion
  (LinearMap
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w))
  (LinearMap
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w))
-> LinearMap
     (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
-> LinearMap
     (Scalar v)
     (Tensor (Scalar v) (Rec0 v s) w)
     (Tensor (Scalar v) (Rec0 v s) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  (Scalar v) (Tensor (Scalar v) v w) (Tensor (Scalar v) v w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  applyTensorFunctional :: Bilinear
  (DualVector (Rec0 v s ⊗ u)) (Rec0 v s ⊗ u) (Scalar (Rec0 v s))
applyTensorFunctional = (LinearMap (Scalar v) (Rec0 v s) (DualVector u)
 -> Tensor (Scalar v) (Rec0 v s) u -> Scalar v)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Rec0 v s) (DualVector u))
     (LinearFunction
        (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) (Scalar v))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar v) (Rec0 v s) (DualVector u)
  -> Tensor (Scalar v) (Rec0 v s) u -> Scalar v)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (Rec0 v s) (DualVector u))
      (LinearFunction
         (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) (Scalar v)))
-> (LinearMap (Scalar v) (Rec0 v s) (DualVector u)
    -> Tensor (Scalar v) (Rec0 v s) u -> Scalar v)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Rec0 v s) (DualVector u))
     (LinearFunction
        (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) (Scalar v))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Rec0 v s)) (DualVector u)
f) Tensor (Scalar v) (Rec0 v s) u
t ->
              (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) v (DualVector u))
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v))
-> LinearMap (Scalar v) v (DualVector u)
-> LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v)
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector v) (DualVector u)
-> LinearMap (Scalar v) v (DualVector u)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector v) (DualVector u)
TensorProduct (DualVector (Rec0 v s)) (DualVector u)
f)LinearFunction (Scalar v) (Tensor (Scalar v) v u) (Scalar v)
-> Tensor (Scalar v) v u -> Scalar v
forall s v w. LinearFunction s v w -> v -> w
-+$>(Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) u) (Tensor (Scalar v) v u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1 Coercion (Tensor (Scalar v) (Rec0 v s) u) (Tensor (Scalar v) v u)
-> Tensor (Scalar v) (Rec0 v s) u -> Tensor (Scalar v) v u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (Rec0 v s) u
t
  applyTensorLinMap :: Bilinear ((Rec0 v s ⊗ u) +> w) (Rec0 v s ⊗ u) w
applyTensorLinMap = (LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w
 -> Tensor (Scalar v) (Rec0 v s) u -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w)
     (LinearFunction (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w
  -> Tensor (Scalar v) (Rec0 v s) u -> w)
 -> LinearFunction
      (Scalar v)
      (LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w)
      (LinearFunction (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w))
-> (LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w
    -> Tensor (Scalar v) (Rec0 v s) u -> w)
-> LinearFunction
     (Scalar v)
     (LinearMap (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w)
     (LinearFunction (Scalar v) (Tensor (Scalar v) (Rec0 v s) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Tensor (Scalar v) (Rec0 v s) u)) w
f) Tensor (Scalar v) (Rec0 v s) u
t
                -> (LinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  (Scalar v)
  (LinearMap (Scalar v) (Tensor (Scalar v) v u) w)
  (LinearFunction (Scalar v) (Tensor (Scalar v) v u) w)
-> LinearMap (Scalar v) (Tensor (Scalar v) v u) w
-> LinearFunction (Scalar v) (Tensor (Scalar v) v u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (Tensor (Scalar v) v u)) w
-> LinearMap (Scalar v) (Tensor (Scalar v) v u) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Tensor (Scalar v) v u)) w
TensorProduct (DualVector (Tensor (Scalar v) (Rec0 v s) u)) w
f)LinearFunction (Scalar v) (Tensor (Scalar v) v u) w
-> Tensor (Scalar v) v u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>(Rec0 v s -> v)
-> Coercion
     (Tensor (Scalar v) (Rec0 v s) u) (Tensor (Scalar v) v u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Rec0 v s -> v
forall i c k (p :: k). K1 i c p -> c
Gnrx.unK1 Coercion (Tensor (Scalar v) (Rec0 v s) u) (Tensor (Scalar v) v u)
-> Tensor (Scalar v) (Rec0 v s) u -> Tensor (Scalar v) v u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar v) (Rec0 v s) u
t
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError

instance (LinearSpace (f p), Num (Scalar (f p))) => LinearSpace (Gnrx.M1 i c f p) where
  type DualVector (Gnrx.M1 i c f p) = DualVector (f p)
  dualSpaceWitness :: DualSpaceWitness (M1 i c f p)
dualSpaceWitness = DualSpaceWitness (M1 i c f p)
forall a. a
genericTensorspaceError
  linearId :: M1 i c f p +> M1 i c f p
linearId = (M1 i c f p -> f p)
-> Coercion
     (LinearMap (Scalar (f p)) (f p) (M1 i c f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) (M1 i c f p))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1
                Coercion
  (LinearMap (Scalar (f p)) (f p) (M1 i c f p))
  (LinearMap (Scalar (f p)) (M1 i c f p) (M1 i c f p))
-> Coercion
     (LinearMap (Scalar (f p)) (f p) (f p))
     (LinearMap (Scalar (f p)) (f p) (M1 i c f p))
-> Coercion
     (LinearMap (Scalar (f p)) (f p) (f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) (M1 i c f p))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion (f p) (M1 i c f p)
-> Coercion
     (LinearMap (Scalar (f p)) (f p) (f p))
     (LinearMap (Scalar (f p)) (f p) (M1 i c f p))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((f p -> M1 i c f p) -> Coercion (f p) (M1 i c f p)
forall (k :: * -> * -> *) a b (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible a b, Object k a, Object k b) =>
p a b -> k a b
follow f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1) Coercion
  (LinearMap (Scalar (f p)) (f p) (f p))
  (LinearMap (Scalar (f p)) (M1 i c f p) (M1 i c f p))
-> LinearMap (Scalar (f p)) (f p) (f p)
-> LinearMap (Scalar (f p)) (M1 i c f p) (M1 i c f p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (f p)) (f p) (f p)
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  applyDualVector :: Bilinear
  (DualVector (M1 i c f p)) (M1 i c f p) (Scalar (M1 i c f p))
applyDualVector = (DualVector (f p) -> M1 i c f p -> Scalar (f p))
-> Bilinear (DualVector (f p)) (M1 i c f p) (Scalar (f p))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((DualVector (f p) -> M1 i c f p -> Scalar (f p))
 -> Bilinear (DualVector (f p)) (M1 i c f p) (Scalar (f p)))
-> (DualVector (f p) -> M1 i c f p -> Scalar (f p))
-> Bilinear (DualVector (f p)) (M1 i c f p) (Scalar (f p))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \DualVector (f p)
dv (Gnrx.M1 f p
v) -> (LinearFunction
  (Scalar (DualVector (f p)))
  (DualVector (f p))
  (LinearFunction (Scalar (DualVector (f p))) (f p) (Scalar (f p)))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (DualVector (f p)))
  (DualVector (f p))
  (LinearFunction (Scalar (DualVector (f p))) (f p) (Scalar (f p)))
-> DualVector (f p)
-> LinearFunction (Scalar (DualVector (f p))) (f p) (Scalar (f p))
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (f p)
dv)LinearFunction (Scalar (DualVector (f p))) (f p) (Scalar (f p))
-> f p -> Scalar (f p)
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
v
  applyLinear :: Bilinear (M1 i c f p +> w) (M1 i c f p) w
applyLinear = (LinearMap (Scalar (f p)) (M1 i c f p) w -> M1 i c f p -> w)
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) w)
     (LinearFunction (Scalar (f p)) (M1 i c f p) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar (f p)) (M1 i c f p) w -> M1 i c f p -> w)
 -> LinearFunction
      (Scalar (f p))
      (LinearMap (Scalar (f p)) (M1 i c f p) w)
      (LinearFunction (Scalar (f p)) (M1 i c f p) w))
-> (LinearMap (Scalar (f p)) (M1 i c f p) w -> M1 i c f p -> w)
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) w)
     (LinearFunction (Scalar (f p)) (M1 i c f p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (M1 i c f p)) w
f) (Gnrx.M1 f p
v)
                      -> (LinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (f p) w)
  (LinearFunction (Scalar (f p)) (f p) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (f p) w)
  (LinearFunction (Scalar (f p)) (f p) w)
-> LinearMap (Scalar (f p)) (f p) w
-> LinearFunction (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (f p)) w
-> LinearMap (Scalar (f p)) (f p) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (f p)) w
TensorProduct (DualVector (M1 i c f p)) w
f)LinearFunction (Scalar (f p)) (f p) w -> f p -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
v
  tensorId :: (M1 i c f p ⊗ w) +> (M1 i c f p ⊗ w)
tensorId = Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) w)
  (Tensor (Scalar (f p)) (f p) w)
-> Coercion
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap ((M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1)
                Coercion
  (LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w))
  (LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w))
-> Coercion
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (f p) w))
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
-> Coercion
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (f p) w))
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (M1 i c f p) w)
-> Coercion
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (f p) w))
     (LinearMap
        (Scalar (f p))
        (Tensor (Scalar (f p)) (f p) w)
        (Tensor (Scalar (f p)) (M1 i c f p) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((f p -> M1 i c f p)
-> Coercion
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS f p -> M1 i c f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
Gnrx.M1) Coercion
  (LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w))
  (LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w))
-> LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (f p) w)
     (Tensor (Scalar (f p)) (f p) w)
-> LinearMap
     (Scalar (f p))
     (Tensor (Scalar (f p)) (M1 i c f p) w)
     (Tensor (Scalar (f p)) (M1 i c f p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  (Scalar (f p))
  (Tensor (Scalar (f p)) (f p) w)
  (Tensor (Scalar (f p)) (f p) w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  applyTensorFunctional :: Bilinear
  (DualVector (M1 i c f p ⊗ u))
  (M1 i c f p ⊗ u)
  (Scalar (M1 i c f p))
applyTensorFunctional = (LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u)
 -> Tensor (Scalar (f p)) (M1 i c f p) u -> Scalar (f p))
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u))
     (LinearFunction
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) u)
        (Scalar (f p)))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u)
  -> Tensor (Scalar (f p)) (M1 i c f p) u -> Scalar (f p))
 -> LinearFunction
      (Scalar (f p))
      (LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u))
      (LinearFunction
         (Scalar (f p))
         (Tensor (Scalar (f p)) (M1 i c f p) u)
         (Scalar (f p))))
-> (LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u)
    -> Tensor (Scalar (f p)) (M1 i c f p) u -> Scalar (f p))
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (M1 i c f p) (DualVector u))
     (LinearFunction
        (Scalar (f p))
        (Tensor (Scalar (f p)) (M1 i c f p) u)
        (Scalar (f p)))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (M1 i c f p)) (DualVector u)
f) Tensor (Scalar (f p)) (M1 i c f p) u
t ->
              (LinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (f p)))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (f p)))
-> LinearMap (Scalar (f p)) (f p) (DualVector u)
-> LinearFunction
     (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (f p))
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (f p)) (DualVector u)
-> LinearMap (Scalar (f p)) (f p) (DualVector u)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (f p)) (DualVector u)
TensorProduct (DualVector (M1 i c f p)) (DualVector u)
f)LinearFunction
  (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (f p))
-> Tensor (Scalar (f p)) (f p) u -> Scalar (f p)
forall s v w. LinearFunction s v w -> v -> w
-+$>(M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) u)
     (Tensor (Scalar (f p)) (f p) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1 Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) u)
  (Tensor (Scalar (f p)) (f p) u)
-> Tensor (Scalar (f p)) (M1 i c f p) u
-> Tensor (Scalar (f p)) (f p) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (M1 i c f p) u
t
  applyTensorLinMap :: Bilinear ((M1 i c f p ⊗ u) +> w) (M1 i c f p ⊗ u) w
applyTensorLinMap = (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w
 -> Tensor (Scalar (f p)) (M1 i c f p) u -> w)
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w)
     (LinearFunction
        (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w
  -> Tensor (Scalar (f p)) (M1 i c f p) u -> w)
 -> LinearFunction
      (Scalar (f p))
      (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w)
      (LinearFunction
         (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w))
-> (LinearMap
      (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w
    -> Tensor (Scalar (f p)) (M1 i c f p) u -> w)
-> LinearFunction
     (Scalar (f p))
     (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w)
     (LinearFunction
        (Scalar (f p)) (Tensor (Scalar (f p)) (M1 i c f p) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Tensor (Scalar (f p)) (M1 i c f p) u)) w
f) Tensor (Scalar (f p)) (M1 i c f p) u
t
                -> (LinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w)
  (LinearFunction (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  (Scalar (f p))
  (LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w)
  (LinearFunction (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w)
-> LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w
-> LinearFunction (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (Tensor (Scalar (f p)) (f p) u)) w
-> LinearMap (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Tensor (Scalar (f p)) (f p) u)) w
TensorProduct (DualVector (Tensor (Scalar (f p)) (M1 i c f p) u)) w
f)LinearFunction (Scalar (f p)) (Tensor (Scalar (f p)) (f p) u) w
-> Tensor (Scalar (f p)) (f p) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>(M1 i c f p -> f p)
-> Coercion
     (Tensor (Scalar (f p)) (M1 i c f p) u)
     (Tensor (Scalar (f p)) (f p) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS M1 i c f p -> f p
forall i (c :: Meta) k (f :: k -> *) (p :: k). M1 i c f p -> f p
Gnrx.unM1 Coercion
  (Tensor (Scalar (f p)) (M1 i c f p) u)
  (Tensor (Scalar (f p)) (f p) u)
-> Tensor (Scalar (f p)) (M1 i c f p) u
-> Tensor (Scalar (f p)) (f p) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (f p)) (M1 i c f p) u
t
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError

data GenericTupleDual f g p
    = GenericTupleDual !(DualVector (f p)) !(DualVector (g p)) deriving ((forall x.
 GenericTupleDual f g p -> Rep (GenericTupleDual f g p) x)
-> (forall x.
    Rep (GenericTupleDual f g p) x -> GenericTupleDual f g p)
-> Generic (GenericTupleDual f g p)
forall x. Rep (GenericTupleDual f g p) x -> GenericTupleDual f g p
forall x. GenericTupleDual f g p -> Rep (GenericTupleDual f g p) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (f :: * -> *) (g :: * -> *) p x.
Rep (GenericTupleDual f g p) x -> GenericTupleDual f g p
forall (f :: * -> *) (g :: * -> *) p x.
GenericTupleDual f g p -> Rep (GenericTupleDual f g p) x
$cto :: forall (f :: * -> *) (g :: * -> *) p x.
Rep (GenericTupleDual f g p) x -> GenericTupleDual f g p
$cfrom :: forall (f :: * -> *) (g :: * -> *) p x.
GenericTupleDual f g p -> Rep (GenericTupleDual f g p) x
Generic)
instance (AdditiveGroup (DualVector (f p)), AdditiveGroup (DualVector (g p)))
    => AdditiveGroup (GenericTupleDual f g p)
instance ( VectorSpace (DualVector (f p)), VectorSpace (DualVector (g p))
         , Scalar (DualVector (f p)) ~ Scalar (DualVector (g p)) )
    => VectorSpace (GenericTupleDual f g p)
instance ( InnerSpace (DualVector (f p)), InnerSpace (DualVector (g p))
         , Scalar (DualVector (f p)) ~ Scalar (DualVector (g p))
         , Num (Scalar (DualVector (f p))) )
    => InnerSpace (GenericTupleDual f g p)
instance (AdditiveGroup (DualVector (f p)), AdditiveGroup (DualVector (g p)))
    => AffineSpace (GenericTupleDual f g p) where
  type Diff (GenericTupleDual f g p) = GenericTupleDual f g p
  .+^ :: GenericTupleDual f g p
-> Diff (GenericTupleDual f g p) -> GenericTupleDual f g p
(.+^) = GenericTupleDual f g p
-> Diff (GenericTupleDual f g p) -> GenericTupleDual f g p
forall v. AdditiveGroup v => v -> v -> v
(^+^)
  .-. :: GenericTupleDual f g p
-> GenericTupleDual f g p -> Diff (GenericTupleDual f g p)
(.-.) = GenericTupleDual f g p
-> GenericTupleDual f g p -> Diff (GenericTupleDual f g p)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
instance (AdditiveGroup (DualVector (f p)), AdditiveGroup (DualVector (g p)))
    => Semimanifold (GenericTupleDual f g p) where
  type Needle (GenericTupleDual f g p) = GenericTupleDual f g p
  .+~^ :: GenericTupleDual f g p
-> Needle (GenericTupleDual f g p) -> GenericTupleDual f g p
(.+~^) = GenericTupleDual f g p
-> Needle (GenericTupleDual f g p) -> GenericTupleDual f g p
forall v. AdditiveGroup v => v -> v -> v
(^+^)
#if !MIN_VERSION_manifolds_core(0,6,0)
  fromInterior = id
  toInterior = pure
  translateP = Tagged (^+^)
#endif
instance (AdditiveGroup (DualVector (f p)), AdditiveGroup (DualVector (g p)))
    => PseudoAffine (GenericTupleDual f g p) where
  GenericTupleDual f g p
p.-~. :: GenericTupleDual f g p
-> GenericTupleDual f g p
-> Maybe (Needle (GenericTupleDual f g p))
.-~.GenericTupleDual f g p
q = GenericTupleDual f g p -> Maybe (GenericTupleDual f g p)
forall a. a -> Maybe a
Just (GenericTupleDual f g p -> Maybe (GenericTupleDual f g p))
-> GenericTupleDual f g p -> Maybe (GenericTupleDual f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ GenericTupleDual f g p
pGenericTupleDual f g p
-> GenericTupleDual f g p -> Diff (GenericTupleDual f g p)
forall p. AffineSpace p => p -> p -> Diff p
.-.GenericTupleDual f g p
q
  .-~! :: GenericTupleDual f g p
-> GenericTupleDual f g p -> Needle (GenericTupleDual f g p)
(.-~!) = GenericTupleDual f g p
-> GenericTupleDual f g p -> Needle (GenericTupleDual f g p)
forall p. AffineSpace p => p -> p -> Diff p
(.-.)

instance ( LinearSpace (f p), LinearSpace (g p)
         , VectorSpace (DualVector (f p)), VectorSpace (DualVector (g p))
         , Scalar (f p) ~ Scalar (DualVector (f p))
         , Scalar (g p) ~ Scalar (DualVector (g p))
         , Scalar (DualVector (f p)) ~ Scalar (DualVector (g p)) )
    => TensorSpace (GenericTupleDual f g p) where
  type TensorProduct (GenericTupleDual f g p) w = (f p+>w, g p+>w)
  wellDefinedVector :: GenericTupleDual f g p -> Maybe (GenericTupleDual f g p)
wellDefinedVector = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                           , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
      (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
       -> \(GenericTupleDual DualVector (f p)
fv DualVector (g p)
gv)
           -> (DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p)
-> Maybe (DualVector (f p))
-> Maybe (DualVector (g p))
-> Maybe (GenericTupleDual f g p)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
forall (f :: * -> *) (g :: * -> *) p.
DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
GenericTupleDual (DualVector (f p) -> Maybe (DualVector (f p))
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector DualVector (f p)
fv) (DualVector (g p) -> Maybe (DualVector (g p))
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector DualVector (g p)
gv)
  wellDefinedTensor :: (GenericTupleDual f g p ⊗ w) -> Maybe (GenericTupleDual f g p ⊗ w)
wellDefinedTensor = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                           , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
      (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
       -> \(Tensor (ft, gt))
        -> (LinearMap (Scalar (DualVector (g p))) (f p) w,
 LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ((LinearMap (Scalar (DualVector (g p))) (f p) w,
  LinearMap (Scalar (DualVector (g p))) (g p) w)
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> Maybe
     (LinearMap (Scalar (DualVector (g p))) (f p) w,
      LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Maybe
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$> (LinearMap (Scalar (DualVector (g p))) (f p) w
 -> LinearMap (Scalar (DualVector (g p))) (g p) w
 -> (LinearMap (Scalar (DualVector (g p))) (f p) w,
     LinearMap (Scalar (DualVector (g p))) (g p) w))
-> Maybe (LinearMap (Scalar (DualVector (g p))) (f p) w)
-> Maybe (LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Maybe
     (LinearMap (Scalar (DualVector (g p))) (f p) w,
      LinearMap (Scalar (DualVector (g p))) (g p) w)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) c b a.
(Applicative f r t, Object r c, ObjectMorphism r b c,
 Object t (f c), ObjectMorphism t (f b) (f c), ObjectPair r a b,
 ObjectPair t (f a) (f b)) =>
r a (r b c) -> t (f a) (t (f b) (f c))
liftA2 (,) (Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
-> Coercion
     (Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w))
     (Maybe (LinearMap (Scalar (DualVector (g p))) (f p) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w))
  (Maybe (LinearMap (Scalar (DualVector (g p))) (f p) w))
-> Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
-> Maybe (LinearMap (Scalar (DualVector (g p))) (f p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (DualVector (f p) ⊗ w) -> Maybe (DualVector (f p) ⊗ w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (f p) w
ft))
                                 (Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Coercion
     (Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w))
     (Maybe (LinearMap (Scalar (DualVector (g p))) (g p) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w))
  (Maybe (LinearMap (Scalar (DualVector (g p))) (g p) w))
-> Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
-> Maybe (LinearMap (Scalar (DualVector (g p))) (g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
-> Maybe (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
forall s v w.
(LinearSpace v, Scalar v ~ s) =>
Coercion (LinearMap s (DualVector v) w) (Tensor s v w)
fromLinearMap Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (g p) w
gt))
  scalarSpaceWitness :: ScalarSpaceWitness (GenericTupleDual f g p)
scalarSpaceWitness = case ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p) of
        ScalarSpaceWitness (f p)
ScalarSpaceWitness -> ScalarSpaceWitness (GenericTupleDual f g p)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (GenericTupleDual f g p)
linearManifoldWitness = LinearManifoldWitness (GenericTupleDual f g p)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
                           BoundarylessWitness
#endif
  zeroTensor :: GenericTupleDual f g p ⊗ w
zeroTensor = case ( LinearManifoldWitness (f p)
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness :: LinearManifoldWitness (f p)
                    , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                    , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       ( LinearManifoldWitness (f p)
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
          BoundarylessWitness
#endif
        ,DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness )
           -> TensorProduct (GenericTupleDual f g p) w
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor, Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor)
  toFlatTensor :: GenericTupleDual f g p
-+> (GenericTupleDual f g p ⊗ Scalar (GenericTupleDual f g p))
toFlatTensor = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                      , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                      , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> (GenericTupleDual f g p
 -> Tensor
      (Scalar (DualVector (g p)))
      (GenericTupleDual f g p)
      (Scalar (DualVector (g p))))
-> LinearFunction
     (Scalar (DualVector (g p)))
     (GenericTupleDual f g p)
     (Tensor
        (Scalar (DualVector (g p)))
        (GenericTupleDual f g p)
        (Scalar (DualVector (g p))))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((GenericTupleDual f g p
  -> Tensor
       (Scalar (DualVector (g p)))
       (GenericTupleDual f g p)
       (Scalar (DualVector (g p))))
 -> LinearFunction
      (Scalar (DualVector (g p)))
      (GenericTupleDual f g p)
      (Tensor
         (Scalar (DualVector (g p)))
         (GenericTupleDual f g p)
         (Scalar (DualVector (g p)))))
-> (GenericTupleDual f g p
    -> Tensor
         (Scalar (DualVector (g p)))
         (GenericTupleDual f g p)
         (Scalar (DualVector (g p))))
-> LinearFunction
     (Scalar (DualVector (g p)))
     (GenericTupleDual f g p)
     (Tensor
        (Scalar (DualVector (g p)))
        (GenericTupleDual f g p)
        (Scalar (DualVector (g p))))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericTupleDual DualVector (f p)
tf DualVector (g p)
tg)
            -> TensorProduct (GenericTupleDual f g p) (Scalar (DualVector (g p)))
-> Tensor
     (Scalar (DualVector (g p)))
     (GenericTupleDual f g p)
     (Scalar (DualVector (g p)))
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( LinearFunction
  (Scalar (f p))
  (DualVector (f p))
  (LinearMap (Scalar (f p)) (f p) (Scalar (f p)))
forall v. LinearSpace v => DualVector v -+> (v +> Scalar v)
toLinearForm LinearFunction
  (Scalar (f p))
  (DualVector (f p))
  (LinearMap (Scalar (f p)) (f p) (Scalar (f p)))
-> DualVector (f p)
-> LinearMap (Scalar (f p)) (f p) (Scalar (f p))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ DualVector (f p)
tf, LinearFunction
  (Scalar (g p))
  (DualVector (g p))
  (LinearMap (Scalar (g p)) (g p) (Scalar (g p)))
forall v. LinearSpace v => DualVector v -+> (v +> Scalar v)
toLinearForm LinearFunction
  (Scalar (g p))
  (DualVector (g p))
  (LinearMap (Scalar (g p)) (g p) (Scalar (g p)))
-> DualVector (g p)
-> LinearMap (Scalar (g p)) (g p) (Scalar (g p))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ DualVector (g p)
tg )
  fromFlatTensor :: (GenericTupleDual f g p ⊗ Scalar (GenericTupleDual f g p))
-+> GenericTupleDual f g p
fromFlatTensor = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                        , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                        , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> (Tensor
   (Scalar (DualVector (g p)))
   (GenericTupleDual f g p)
   (Scalar (DualVector (g p)))
 -> GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor
        (Scalar (DualVector (g p)))
        (GenericTupleDual f g p)
        (Scalar (DualVector (g p))))
     (GenericTupleDual f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor
    (Scalar (DualVector (g p)))
    (GenericTupleDual f g p)
    (Scalar (DualVector (g p)))
  -> GenericTupleDual f g p)
 -> LinearFunction
      (Scalar (DualVector (g p)))
      (Tensor
         (Scalar (DualVector (g p)))
         (GenericTupleDual f g p)
         (Scalar (DualVector (g p))))
      (GenericTupleDual f g p))
-> (Tensor
      (Scalar (DualVector (g p)))
      (GenericTupleDual f g p)
      (Scalar (DualVector (g p)))
    -> GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor
        (Scalar (DualVector (g p)))
        (GenericTupleDual f g p)
        (Scalar (DualVector (g p))))
     (GenericTupleDual f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (tf,tg))
            -> DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
forall (f :: * -> *) (g :: * -> *) p.
DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
GenericTupleDual (LinearFunction
  (Scalar (DualVector (f p)))
  (LinearMap (Scalar (f p)) (f p) (Scalar (f p)))
  (DualVector (f p))
forall v. LinearSpace v => (v +> Scalar v) -+> DualVector v
fromLinearForm LinearFunction
  (Scalar (DualVector (f p)))
  (LinearMap (Scalar (f p)) (f p) (Scalar (f p)))
  (DualVector (f p))
-> LinearMap (Scalar (f p)) (f p) (Scalar (f p))
-> DualVector (f p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (f p)) (f p) (Scalar (f p))
tf) (LinearFunction
  (Scalar (DualVector (g p)))
  (LinearMap (Scalar (g p)) (g p) (Scalar (g p)))
  (DualVector (g p))
forall v. LinearSpace v => (v +> Scalar v) -+> DualVector v
fromLinearForm LinearFunction
  (Scalar (DualVector (g p)))
  (LinearMap (Scalar (g p)) (g p) (Scalar (g p)))
  (DualVector (g p))
-> LinearMap (Scalar (g p)) (g p) (Scalar (g p))
-> DualVector (g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (g p)) (g p) (Scalar (g p))
tg)
  addTensors :: (GenericTupleDual f g p ⊗ w)
-> (GenericTupleDual f g p ⊗ w) -> GenericTupleDual f g p ⊗ w
addTensors (Tensor (sf,sg)) (Tensor (tf,tg)) = TensorProduct (GenericTupleDual f g p) w
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearMap (Scalar (DualVector (g p))) (f p) w
sfLinearMap (Scalar (DualVector (g p))) (f p) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
forall v. AdditiveGroup v => v -> v -> v
^+^LinearMap (Scalar (DualVector (g p))) (f p) w
tf, LinearMap (Scalar (DualVector (g p))) (g p) w
sgLinearMap (Scalar (DualVector (g p))) (g p) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
forall v. AdditiveGroup v => v -> v -> v
^+^LinearMap (Scalar (DualVector (g p))) (g p) w
tg)
  negateTensor :: (GenericTupleDual f g p ⊗ w) -+> (GenericTupleDual f g p ⊗ w)
negateTensor = (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
 -> LinearFunction
      (Scalar (DualVector (g p)))
      (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
      (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w))
-> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (tf,tg))
                   -> TensorProduct (GenericTupleDual f g p) w
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (LinearMap (Scalar (DualVector (g p))) (f p) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
forall v. AdditiveGroup v => v -> v
negateV LinearMap (Scalar (DualVector (g p))) (f p) w
tf, LinearMap (Scalar (DualVector (g p))) (g p) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
forall v. AdditiveGroup v => v -> v
negateV LinearMap (Scalar (DualVector (g p))) (g p) w
tg)
  scaleTensor :: Bilinear
  (Scalar (GenericTupleDual f g p))
  (GenericTupleDual f g p ⊗ w)
  (GenericTupleDual f g p ⊗ w)
scaleTensor = (Scalar (DualVector (g p))
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> Bilinear
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((Scalar (DualVector (g p))
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
 -> Bilinear
      (Scalar (DualVector (g p)))
      (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
      (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w))
-> (Scalar (DualVector (g p))
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> Bilinear
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar (DualVector (g p))
μ (Tensor (tf,tg)) -> TensorProduct (GenericTupleDual f g p) w
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Scalar (LinearMap (Scalar (DualVector (g p))) (f p) w)
Scalar (DualVector (g p))
μScalar (LinearMap (Scalar (DualVector (g p))) (f p) w)
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
forall v. VectorSpace v => Scalar v -> v -> v
*^LinearMap (Scalar (DualVector (g p))) (f p) w
tf, Scalar (LinearMap (Scalar (DualVector (g p))) (g p) w)
Scalar (DualVector (g p))
μScalar (LinearMap (Scalar (DualVector (g p))) (g p) w)
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
forall v. VectorSpace v => Scalar v -> v -> v
*^LinearMap (Scalar (DualVector (g p))) (g p) w
tg)
  tensorProduct :: Bilinear (GenericTupleDual f g p) w (GenericTupleDual f g p ⊗ w)
tensorProduct = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                       , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                       , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> (GenericTupleDual f g p
 -> w
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> LinearFunction
     (Scalar (DualVector (f p)))
     (GenericTupleDual f g p)
     (LinearFunction
        (Scalar (DualVector (f p)))
        w
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericTupleDual f g p
  -> w
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
 -> LinearFunction
      (Scalar (DualVector (f p)))
      (GenericTupleDual f g p)
      (LinearFunction
         (Scalar (DualVector (f p)))
         w
         (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)))
-> (GenericTupleDual f g p
    -> w
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
-> LinearFunction
     (Scalar (DualVector (f p)))
     (GenericTupleDual f g p)
     (LinearFunction
        (Scalar (DualVector (f p)))
        w
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericTupleDual DualVector (f p)
fw DualVector (g p)
gw) w
x
                   -> TensorProduct (GenericTupleDual f g p) w
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w)
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) w
-> LinearMap (Scalar (DualVector (g p))) (f p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ DualVector (f p)
fwDualVector (f p) -> w -> DualVector (f p) ⊗ w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v,
 Num' (Scalar v)) =>
v -> w -> v ⊗ w
w
x, Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
-> LinearMap (Scalar (DualVector (g p))) (g p) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ DualVector (g p)
gwDualVector (g p)
-> w -> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v,
 Num' (Scalar v)) =>
v -> w -> v ⊗ w
w
x)
  transposeTensor :: (GenericTupleDual f g p ⊗ w) -+> (w ⊗ GenericTupleDual f g p)
transposeTensor = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                         , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                         , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
 -> w ⊗ GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (w ⊗ GenericTupleDual f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
  -> w ⊗ GenericTupleDual f g p)
 -> LinearFunction
      (Scalar (DualVector (g p)))
      (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
      (w ⊗ GenericTupleDual f g p))
-> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
    -> w ⊗ GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
     (w ⊗ GenericTupleDual f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(Tensor (fw, gw))
                     -> (LinearFunction
  (Scalar (DualVector (g p)))
  (LinearFunction
     (Scalar (DualVector (f p)))
     (DualVector (f p), DualVector (g p))
     (GenericTupleDual f g p))
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar w) w (DualVector (f p)),
      Tensor (Scalar w) w (DualVector (g p)))
     (w ⊗ GenericTupleDual f g p))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (DualVector (g p)))
  (LinearFunction
     (Scalar (DualVector (f p)))
     (DualVector (f p), DualVector (g p))
     (GenericTupleDual f g p))
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar w) w (DualVector (f p)),
      Tensor (Scalar w) w (DualVector (g p)))
     (w ⊗ GenericTupleDual f g p))
-> LinearFunction
     (Scalar (DualVector (f p)))
     (DualVector (f p), DualVector (g p))
     (GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar w) w (DualVector (f p)),
      Tensor (Scalar w) w (DualVector (g p)))
     (w ⊗ GenericTupleDual f g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>((DualVector (f p), DualVector (g p)) -> GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (DualVector (f p), DualVector (g p))
     (GenericTupleDual f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction(((DualVector (f p), DualVector (g p)) -> GenericTupleDual f g p)
 -> LinearFunction
      (Scalar (DualVector (g p)))
      (DualVector (f p), DualVector (g p))
      (GenericTupleDual f g p))
-> ((DualVector (f p), DualVector (g p)) -> GenericTupleDual f g p)
-> LinearFunction
     (Scalar (DualVector (f p)))
     (DualVector (f p), DualVector (g p))
     (GenericTupleDual f g p)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`(DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p)
-> (DualVector (f p), DualVector (g p)) -> GenericTupleDual f g p
forall (k :: * -> * -> *) a b c.
(Curry k, ObjectPair k a b, ObjectMorphism k b c) =>
k a (k b c) -> k (a, b) c
uncurry DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
forall (f :: * -> *) (g :: * -> *) p.
DualVector (f p) -> DualVector (g p) -> GenericTupleDual f g p
GenericTupleDual)
                       LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar w) w (DualVector (f p)),
   Tensor (Scalar w) w (DualVector (g p)))
  (w ⊗ GenericTupleDual f g p)
-> (Tensor (Scalar w) w (DualVector (f p)),
    Tensor (Scalar w) w (DualVector (g p)))
-> w ⊗ GenericTupleDual f g p
forall s v w. LinearFunction s v w -> v -> w
-+$> ( LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
  (Tensor (Scalar w) w (DualVector (f p)))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
  (Tensor (Scalar w) w (DualVector (f p)))
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w
-> Tensor (Scalar w) w (DualVector (f p))
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (f p) w
fw
                            , LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (Tensor (Scalar w) w (DualVector (g p)))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensorLinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (Tensor (Scalar w) w (DualVector (g p)))
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
-> Tensor (Scalar w) w (DualVector (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (g p) w
gw )
  fmapTensor :: Bilinear
  (w -+> x) (GenericTupleDual f g p ⊗ w) (GenericTupleDual f g p ⊗ x)
fmapTensor = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                    , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                    , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> ((w -+> x)
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w -+> x)
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
 -> LinearFunction
      (Scalar x)
      (w -+> x)
      (LinearFunction
         (Scalar x)
         (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
         (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)))
-> ((w -+> x)
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
-> LinearFunction
     (Scalar x)
     (w -+> x)
     (LinearFunction
        (Scalar x)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w -+> x
f (Tensor (fw, gw))
                 -> TensorProduct (GenericTupleDual f g p) x
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x)
  (LinearMap (Scalar (DualVector (g p))) (f p) x)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x)
  (LinearMap (Scalar (DualVector (g p))) (f p) x)
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x
-> LinearMap (Scalar (DualVector (g p))) (f p) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (g p)))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (DualVector (g p)))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f) LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x)
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) x
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (f p) w
fw
                           , Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
  (LinearMap (Scalar (DualVector (g p))) (g p) x)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
  (LinearMap (Scalar (DualVector (g p))) (g p) x)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x
-> LinearMap (Scalar (DualVector (g p))) (g p) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (g p)))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (DualVector (g p)))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x))
-> (w -+> x)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f) LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (g p) w
gw )
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (GenericTupleDual f g p ⊗ w, GenericTupleDual f g p ⊗ x)
  (GenericTupleDual f g p ⊗ u)
fzipTensorWith = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                        , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                        , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
          -> (((w, x) -+> u)
 -> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
     Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
 -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
         Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((((w, x) -+> u)
  -> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
      Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
  -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
          Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
         (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u)))
-> (((w, x) -+> u)
    -> (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
        Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
    -> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) w,
         Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) x)
        (Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(w, x) -+> u
f (Tensor (fw, gw), Tensor (fx, gx))
                 -> TensorProduct (GenericTupleDual f g p) u
-> Tensor (Scalar (DualVector (g p))) (GenericTupleDual f g p) u
forall s v w. TensorProduct v w -> Tensor s v w
Tensor ( Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u)
  (LinearMap (Scalar (DualVector (g p))) (f p) u)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u)
  (LinearMap (Scalar (DualVector (g p))) (f p) u)
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u
-> LinearMap (Scalar (DualVector (g p))) (f p) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (g p)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w,
      Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (DualVector (g p)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w,
      Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w,
      Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f) LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w,
   Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
  (Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u)
-> (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w,
    Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
-> Tensor (Scalar (DualVector (g p))) (DualVector (f p)) u
forall s v w. LinearFunction s v w -> v -> w
-+$> ( Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) w)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w)
-> LinearMap (Scalar (DualVector (g p))) (f p) w
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (f p) w
fw
                                                                     , Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) x)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (f p) x)
  (Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x)
-> LinearMap (Scalar (DualVector (g p))) (f p) x
-> Tensor (Scalar (DualVector (f p))) (DualVector (f p)) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (f p) x
fx )
                           , Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u)
  (LinearMap (Scalar (DualVector (g p))) (g p) u)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u)
  (LinearMap (Scalar (DualVector (g p))) (g p) u)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u
-> LinearMap (Scalar (DualVector (g p))) (g p) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (g p)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w,
      Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (DualVector (g p)))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w,
      Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (DualVector (g p)))
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w,
      Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
     (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f) LinearFunction
  (Scalar (DualVector (g p)))
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w,
   Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u)
-> (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w,
    Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) u
forall s v w. LinearFunction s v w -> v -> w
-+$> ( Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) w)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w)
-> LinearMap (Scalar (DualVector (g p))) (g p) w
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (g p) w
gw
                                                                     , Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) x)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor Coercion
  (LinearMap (Scalar (DualVector (g p))) (g p) x)
  (Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x)
-> LinearMap (Scalar (DualVector (g p))) (g p) x
-> Tensor (Scalar (DualVector (g p))) (DualVector (g p)) x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap (Scalar (DualVector (g p))) (g p) x
gx ) )
  coerceFmapTensorProduct :: p (GenericTupleDual f g p)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericTupleDual f g p) a)
     (TensorProduct (GenericTupleDual f g p) b)
coerceFmapTensorProduct p (GenericTupleDual f g p)
p Coercion a b
cab = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                                       , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness) -> case
             ( p (DualVector (f p))
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector (f p)) a)
     (TensorProduct (DualVector (f p)) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((\(GenericTupleDual DualVector (f p)
u DualVector (g p)
_)->DualVector (f p)
u)(GenericTupleDual f g p -> DualVector (f p))
-> p (GenericTupleDual f g p) -> p (DualVector (f p))
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p (GenericTupleDual f g p)
p) Coercion a b
cab
             , p (DualVector (g p))
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector (g p)) a)
     (TensorProduct (DualVector (g p)) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ((\(GenericTupleDual DualVector (f p)
_ DualVector (g p)
v)->DualVector (g p)
v)(GenericTupleDual f g p -> DualVector (g p))
-> p (GenericTupleDual f g p) -> p (DualVector (g p))
forall (f :: * -> *) (r :: * -> * -> *) a b.
(Functor f r (->), Object r a, Object r b) =>
r a b -> f a -> f b
<$>p (GenericTupleDual f g p)
p) Coercion a b
cab ) of
          (Coercion
  (TensorProduct (DualVector (f p)) a)
  (TensorProduct (DualVector (f p)) b)
Coercion, Coercion
  (TensorProduct (DualVector (g p)) a)
  (TensorProduct (DualVector (g p)) b)
Coercion) -> Coercion
  (TensorProduct (GenericTupleDual f g p) a)
  (TensorProduct (GenericTupleDual f g p) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
  


instance  f g p . ( LinearSpace (f p), LinearSpace (g p), Scalar (f p) ~ Scalar (g p) )
                       => LinearSpace ((f:*:g) p) where
  type DualVector ((f:*:g) p) = GenericTupleDual f g p
  
  dualSpaceWitness :: DualSpaceWitness ((:*:) f g p)
dualSpaceWitness = DualSpaceWitness ((:*:) f g p)
forall a. a
genericTensorspaceError
  linearId :: (:*:) f g p +> (:*:) f g p
linearId = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                  , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                  , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
             -> TensorProduct (DualVector ((:*:) f g p)) ((:*:) f g p)
-> LinearMap (Scalar (g p)) ((:*:) f g p) ((:*:) f g p)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap ( LinearFunction (Scalar (g p)) (f p) ((:*:) f g p)
-> LinearMap (Scalar (g p)) (f p) ((:*:) f g p)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction (Scalar (g p)) (f p) ((:*:) f g p)
 -> LinearMap (Scalar (g p)) (f p) ((:*:) f g p))
-> LinearFunction (Scalar (g p)) (f p) ((:*:) f g p)
-> LinearMap (Scalar (g p)) (f p) ((:*:) f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (f p -> (:*:) f g p)
-> LinearFunction (Scalar (g p)) (f p) ((:*:) f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (\f p
vf->(f p
vff p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:g p
forall v. AdditiveGroup v => v
zeroV))
                          , LinearFunction (Scalar (g p)) (g p) ((:*:) f g p)
-> LinearMap (Scalar (g p)) (g p) ((:*:) f g p)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction (Scalar (g p)) (g p) ((:*:) f g p)
 -> LinearMap (Scalar (g p)) (g p) ((:*:) f g p))
-> LinearFunction (Scalar (g p)) (g p) ((:*:) f g p)
-> LinearMap (Scalar (g p)) (g p) ((:*:) f g p)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (g p -> (:*:) f g p)
-> LinearFunction (Scalar (g p)) (g p) ((:*:) f g p)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (\g p
vg->(f p
forall v. AdditiveGroup v => v
zeroVf p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:g p
vg)) )
  tensorId :: ((:*:) f g p ⊗ w) +> ((:*:) f g p ⊗ w)
tensorId = ScalarSpaceWitness (f p)
-> DualSpaceWitness (f p)
-> DualSpaceWitness (g p)
-> DualSpaceWitness w
-> ((:*:) f g p ⊗ w) +> ((:*:) f g p ⊗ w)
forall w.
(LinearSpace w, Scalar w ~ Scalar (f p)) =>
ScalarSpaceWitness (f p)
-> DualSpaceWitness (f p)
-> DualSpaceWitness (g p)
-> DualSpaceWitness w
-> ((:*:) f g p ⊗ w) +> ((:*:) f g p ⊗ w)
tI ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness DualSpaceWitness w
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness
   where tI ::  w . (LinearSpace w, Scalar w ~ Scalar (f p))
                 => ScalarSpaceWitness (f p) -> DualSpaceWitness (f p)
                     -> DualSpaceWitness (g p) -> DualSpaceWitness w
                       -> (((f:*:g) p)w)+>(((f:*:g) p)w)
         tI :: ScalarSpaceWitness (f p)
-> DualSpaceWitness (f p)
-> DualSpaceWitness (g p)
-> DualSpaceWitness w
-> ((:*:) f g p ⊗ w) +> ((:*:) f g p ⊗ w)
tI ScalarSpaceWitness (f p)
ScalarSpaceWitness DualSpaceWitness (f p)
DualSpaceWitness DualSpaceWitness (g p)
DualSpaceWitness DualSpaceWitness w
DualSpaceWitness 
              = TensorProduct
  (DualVector (Tensor (Scalar (g p)) ((:*:) f g p) w))
  (Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearMap
     (Scalar (g p))
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap
            ( LinearFunction
  (Scalar (g p))
  (f p)
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p))
     (f p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction
   (Scalar (g p))
   (f p)
   (Tensor
      (Scalar (g p))
      (DualVector w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
 -> LinearMap
      (Scalar (g p))
      (f p)
      (Tensor
         (Scalar (g p))
         (DualVector w)
         (Tensor (Scalar (g p)) ((:*:) f g p) w)))
-> LinearFunction
     (Scalar (g p))
     (f p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p))
     (f p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (f p
 -> Tensor
      (Scalar (g p))
      (DualVector w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearFunction
     (Scalar (g p))
     (f p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (\f p
vf -> Coercion
  (LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor
             Coercion
  (LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
-> Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
 -> LinearFunction
      (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> (w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w
w -> TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (f p
vff p -> w -> Tensor (Scalar (f p)) (f p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v,
 Num' (Scalar v)) =>
v -> w -> v ⊗ w
w
w, Tensor (Scalar (g p)) (g p) w
forall v. AdditiveGroup v => v
zeroV)))
            , LinearFunction
  (Scalar (g p))
  (g p)
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p))
     (g p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (LinearFunction
   (Scalar (g p))
   (g p)
   (Tensor
      (Scalar (g p))
      (DualVector w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
 -> LinearMap
      (Scalar (g p))
      (g p)
      (Tensor
         (Scalar (g p))
         (DualVector w)
         (Tensor (Scalar (g p)) ((:*:) f g p) w)))
-> LinearFunction
     (Scalar (g p))
     (g p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p))
     (g p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (g p
 -> Tensor
      (Scalar (g p))
      (DualVector w)
      (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearFunction
     (Scalar (g p))
     (g p)
     (Tensor
        (Scalar (g p))
        (DualVector w)
        (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (\g p
vg -> Coercion
  (LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
forall s v w.
Coercion (LinearMap s v w) (Tensor s (DualVector v) w)
asTensor
             Coercion
  (LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
  (Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
-> Tensor
     (Scalar (g p))
     (DualVector w)
     (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearMap
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
 -> LinearFunction
      (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w))
-> (w -> Tensor (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p)) w (Tensor (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w
w -> TensorProduct ((:*:) f g p) w
-> Tensor (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor (Tensor (Scalar (g p)) (f p) w
forall v. AdditiveGroup v => v
zeroV, g p
vgg p -> w -> Tensor (Scalar (g p)) (g p) w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v,
 Num' (Scalar v)) =>
v -> w -> v ⊗ w
w
w))) )
  sampleLinearFunction :: ((:*:) f g p -+> w) -+> ((:*:) f g p +> w)
sampleLinearFunction = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                              , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                              , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
              -> (LinearFunction (Scalar (g p)) ((:*:) f g p) w
 -> LinearMap (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p))
     (LinearFunction (Scalar (g p)) ((:*:) f g p) w)
     (LinearMap (Scalar (g p)) ((:*:) f g p) w)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((LinearFunction (Scalar (g p)) ((:*:) f g p) w
  -> LinearMap (Scalar (g p)) ((:*:) f g p) w)
 -> LinearFunction
      (Scalar (g p))
      (LinearFunction (Scalar (g p)) ((:*:) f g p) w)
      (LinearMap (Scalar (g p)) ((:*:) f g p) w))
-> (LinearFunction (Scalar (g p)) ((:*:) f g p) w
    -> LinearMap (Scalar (g p)) ((:*:) f g p) w)
-> LinearFunction
     (Scalar (g p))
     (LinearFunction (Scalar (g p)) ((:*:) f g p) w)
     (LinearMap (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \LinearFunction (Scalar (g p)) ((:*:) f g p) w
f -> TensorProduct (DualVector ((:*:) f g p)) w
-> LinearMap (Scalar (g p)) ((:*:) f g p) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap
                   ( LinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar w) (f p) w)
  (LinearMap (Scalar (f p)) (f p) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar w) (f p) w)
  (LinearMap (Scalar (f p)) (f p) w)
-> LinearFunction (Scalar w) (f p) w
-> LinearMap (Scalar (f p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$> (f p -> w) -> LinearFunction (Scalar (g p)) (f p) w
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction((f p -> w) -> LinearFunction (Scalar (g p)) (f p) w)
-> (f p -> w) -> LinearFunction (Scalar w) (f p) w
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`
                       \f p
vf -> LinearFunction (Scalar (g p)) ((:*:) f g p) w
f LinearFunction (Scalar (g p)) ((:*:) f g p) w -> (:*:) f g p -> w
forall s v w. LinearFunction s v w -> v -> w
-+$> (f p
vff p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:g p
forall v. AdditiveGroup v => v
zeroV)
                   , LinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar w) (g p) w)
  (LinearMap (Scalar (g p)) (g p) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar v ~ Scalar w) =>
(v -+> w) -+> (v +> w)
sampleLinearFunction LinearFunction
  (Scalar (g p))
  (LinearFunction (Scalar w) (g p) w)
  (LinearMap (Scalar (g p)) (g p) w)
-> LinearFunction (Scalar w) (g p) w
-> LinearMap (Scalar (g p)) (g p) w
forall s v w. LinearFunction s v w -> v -> w
-+$> (g p -> w) -> LinearFunction (Scalar (g p)) (g p) w
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction((g p -> w) -> LinearFunction (Scalar (g p)) (g p) w)
-> (g p -> w) -> LinearFunction (Scalar w) (g p) w
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`
                       \g p
vg -> LinearFunction (Scalar (g p)) ((:*:) f g p) w
f LinearFunction (Scalar (g p)) ((:*:) f g p) w -> (:*:) f g p -> w
forall s v w. LinearFunction s v w -> v -> w
-+$> (f p
forall v. AdditiveGroup v => v
zeroVf p -> g p -> (:*:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:g p
vg) )
  applyDualVector :: Bilinear
  (DualVector ((:*:) f g p)) ((:*:) f g p) (Scalar ((:*:) f g p))
applyDualVector = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                         , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                         , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
              -> (GenericTupleDual f g p -> (:*:) f g p -> Scalar (g p))
-> LinearFunction
     (Scalar (DualVector (f p)))
     (GenericTupleDual f g p)
     (LinearFunction
        (Scalar (DualVector (f p))) ((:*:) f g p) (Scalar (g p)))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericTupleDual f g p -> (:*:) f g p -> Scalar (g p))
 -> LinearFunction
      (Scalar (DualVector (f p)))
      (GenericTupleDual f g p)
      (LinearFunction
         (Scalar (DualVector (f p))) ((:*:) f g p) (Scalar (g p))))
-> (GenericTupleDual f g p -> (:*:) f g p -> Scalar (g p))
-> LinearFunction
     (Scalar (DualVector (f p)))
     (GenericTupleDual f g p)
     (LinearFunction
        (Scalar (DualVector (f p))) ((:*:) f g p) (Scalar (g p)))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericTupleDual DualVector (f p)
du DualVector (g p)
dv) (f p
u:*:g p
v)
                      -> ((LinearFunction
  (Scalar (g p))
  (DualVector (f p))
  (LinearFunction (Scalar (g p)) (f p) (Scalar (g p)))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (g p))
  (DualVector (f p))
  (LinearFunction (Scalar (g p)) (f p) (Scalar (g p)))
-> DualVector (f p)
-> LinearFunction (Scalar (g p)) (f p) (Scalar (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (f p)
du)LinearFunction (Scalar (g p)) (f p) (Scalar (g p))
-> f p -> Scalar (g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
u) Scalar (g p) -> Scalar (g p) -> Scalar (g p)
forall v. AdditiveGroup v => v -> v -> v
^+^ ((LinearFunction
  (Scalar (g p))
  (DualVector (g p))
  (LinearFunction (Scalar (g p)) (g p) (Scalar (g p)))
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (g p))
  (DualVector (g p))
  (LinearFunction (Scalar (g p)) (g p) (Scalar (g p)))
-> DualVector (g p)
-> LinearFunction (Scalar (g p)) (g p) (Scalar (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (g p)
dv)LinearFunction (Scalar (g p)) (g p) (Scalar (g p))
-> g p -> Scalar (g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>g p
v)
  applyLinear :: Bilinear ((:*:) f g p +> w) ((:*:) f g p) w
applyLinear = case ( ScalarSpaceWitness (f p)
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness :: ScalarSpaceWitness (f p)
                     , DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                     , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (ScalarSpaceWitness (f p)
ScalarSpaceWitness, DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
              -> (LinearMap (Scalar (g p)) ((:*:) f g p) w -> (:*:) f g p -> w)
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) ((:*:) f g p) w)
     (LinearFunction (Scalar (g p)) ((:*:) f g p) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar (g p)) ((:*:) f g p) w -> (:*:) f g p -> w)
 -> LinearFunction
      (Scalar (g p))
      (LinearMap (Scalar (g p)) ((:*:) f g p) w)
      (LinearFunction (Scalar (g p)) ((:*:) f g p) w))
-> (LinearMap (Scalar (g p)) ((:*:) f g p) w -> (:*:) f g p -> w)
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) ((:*:) f g p) w)
     (LinearFunction (Scalar (g p)) ((:*:) f g p) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap (fu, fv)) (f p
u:*:g p
v)
                      -> ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (f p)) (f p) w)
  (LinearFunction (Scalar (g p)) (f p) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (f p)) (f p) w)
  (LinearFunction (Scalar (g p)) (f p) w)
-> LinearMap (Scalar (f p)) (f p) w
-> LinearFunction (Scalar (g p)) (f p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (f p)) (f p) w
fu)LinearFunction (Scalar (g p)) (f p) w -> f p -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>f p
u) w -> w -> w
forall v. AdditiveGroup v => v -> v -> v
^+^ ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (g p) w)
  (LinearFunction (Scalar (g p)) (g p) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (g p) w)
  (LinearFunction (Scalar (g p)) (g p) w)
-> LinearMap (Scalar (g p)) (g p) w
-> LinearFunction (Scalar (g p)) (g p) w
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (g p)) (g p) w
fv)LinearFunction (Scalar (g p)) (g p) w -> g p -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>g p
v)
  composeLinear :: Bilinear (w +> x) ((:*:) f g p +> w) ((:*:) f g p +> x)
composeLinear = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                       , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
       (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness)
              -> ((w +> x)
 -> LinearMap (Scalar (g p)) ((:*:) f g p) w
 -> LinearMap (Scalar (g p)) ((:*:) f g p) x)
-> LinearFunction
     (Scalar (g p))
     (w +> x)
     (LinearFunction
        (Scalar (g p))
        (LinearMap (Scalar (g p)) ((:*:) f g p) w)
        (LinearMap (Scalar (g p)) ((:*:) f g p) x))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction (((w +> x)
  -> LinearMap (Scalar (g p)) ((:*:) f g p) w
  -> LinearMap (Scalar (g p)) ((:*:) f g p) x)
 -> LinearFunction
      (Scalar (g p))
      (w +> x)
      (LinearFunction
         (Scalar (g p))
         (LinearMap (Scalar (g p)) ((:*:) f g p) w)
         (LinearMap (Scalar (g p)) ((:*:) f g p) x)))
-> ((w +> x)
    -> LinearMap (Scalar (g p)) ((:*:) f g p) w
    -> LinearMap (Scalar (g p)) ((:*:) f g p) x)
-> LinearFunction
     (Scalar (g p))
     (w +> x)
     (LinearFunction
        (Scalar (g p))
        (LinearMap (Scalar (g p)) ((:*:) f g p) w)
        (LinearMap (Scalar (g p)) ((:*:) f g p) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \w +> x
f (LinearMap (fu, fv))
                    -> TensorProduct (DualVector ((:*:) f g p)) x
-> LinearMap (Scalar (g p)) ((:*:) f g p) x
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap ( (LinearFunction
  (Scalar (g p))
  (w +> x)
  (LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (f p)) (f p) w)
     (LinearMap (Scalar (f p)) (f p) x))
forall v w x.
(LinearSpace v, LinearSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w +> x) (v +> w) (v +> x)
composeLinearLinearFunction
  (Scalar (g p))
  (w +> x)
  (LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (f p)) (f p) w)
     (LinearMap (Scalar (f p)) (f p) x))
-> (w +> x)
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (f p)) (f p) w)
     (LinearMap (Scalar (f p)) (f p) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f)LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (f p)) (f p) w)
  (LinearMap (Scalar (f p)) (f p) x)
-> LinearMap (Scalar (f p)) (f p) w
-> LinearMap (Scalar (f p)) (f p) x
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (f p)) (f p) w
fu
                                 , (LinearFunction
  (Scalar (g p))
  (w +> x)
  (LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) (g p) w)
     (LinearMap (Scalar (g p)) (g p) x))
forall v w x.
(LinearSpace v, LinearSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w +> x) (v +> w) (v +> x)
composeLinearLinearFunction
  (Scalar (g p))
  (w +> x)
  (LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) (g p) w)
     (LinearMap (Scalar (g p)) (g p) x))
-> (w +> x)
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) (g p) w)
     (LinearMap (Scalar (g p)) (g p) x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w +> x
f)LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (g p) w)
  (LinearMap (Scalar (g p)) (g p) x)
-> LinearMap (Scalar (g p)) (g p) w
-> LinearMap (Scalar (g p)) (g p) x
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (g p)) (g p) w
fv )
  applyTensorFunctional :: Bilinear
  (DualVector ((:*:) f g p ⊗ u))
  ((:*:) f g p ⊗ u)
  (Scalar ((:*:) f g p))
applyTensorFunctional = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                               , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
     (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness) -> (LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u)
 -> Tensor (Scalar (g p)) ((:*:) f g p) u -> Scalar (g p))
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u))
     (LinearFunction
        (Scalar (g p))
        (Tensor (Scalar (g p)) ((:*:) f g p) u)
        (Scalar (g p)))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u)
  -> Tensor (Scalar (g p)) ((:*:) f g p) u -> Scalar (g p))
 -> LinearFunction
      (Scalar (g p))
      (LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u))
      (LinearFunction
         (Scalar (g p))
         (Tensor (Scalar (g p)) ((:*:) f g p) u)
         (Scalar (g p))))
-> (LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u)
    -> Tensor (Scalar (g p)) ((:*:) f g p) u -> Scalar (g p))
-> LinearFunction
     (Scalar (g p))
     (LinearMap (Scalar (g p)) ((:*:) f g p) (DualVector u))
     (LinearFunction
        (Scalar (g p))
        (Tensor (Scalar (g p)) ((:*:) f g p) u)
        (Scalar (g p)))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
                  \(LinearMap (fu,fv)) (Tensor (tu,tv))
          -> ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p)))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p)))
-> LinearMap (Scalar (g p)) (f p) (DualVector u)
-> LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (g p)) (f p) (DualVector u)
fu)LinearFunction
  (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p))
-> Tensor (Scalar (f p)) (f p) u -> Scalar (g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) u
tu) Scalar (g p) -> Scalar (g p) -> Scalar (g p)
forall a. Num a => a -> a -> a
+ ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p)))
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (f p) (DualVector u))
  (LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p)))
-> LinearMap (Scalar (g p)) (f p) (DualVector u)
-> LinearFunction
     (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p))
forall s v w. LinearFunction s v w -> v -> w
-+$>LinearMap (Scalar (g p)) (f p) (DualVector u)
fu)LinearFunction
  (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) (Scalar (g p))
-> Tensor (Scalar (f p)) (f p) u -> Scalar (g p)
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) u
tu)
  applyTensorLinMap :: Bilinear (((:*:) f g p ⊗ u) +> w) ((:*:) f g p ⊗ u) w
applyTensorLinMap = case ( DualSpaceWitness (f p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (f p)
                           , DualSpaceWitness (g p)
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (g p) ) of
     (DualSpaceWitness (f p)
DualSpaceWitness, DualSpaceWitness (g p)
DualSpaceWitness) -> (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w
 -> Tensor (Scalar (g p)) ((:*:) f g p) u -> w)
-> LinearFunction
     (Scalar (g p))
     (LinearMap
        (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w)
     (LinearFunction
        (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction((LinearMap
    (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w
  -> Tensor (Scalar (g p)) ((:*:) f g p) u -> w)
 -> LinearFunction
      (Scalar (g p))
      (LinearMap
         (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w)
      (LinearFunction
         (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w))
-> (LinearMap
      (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w
    -> Tensor (Scalar (g p)) ((:*:) f g p) u -> w)
-> LinearFunction
     (Scalar (g p))
     (LinearMap
        (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w)
     (LinearFunction
        (Scalar (g p)) (Tensor (Scalar (g p)) ((:*:) f g p) u) w)
forall κ (k :: κ -> κ -> *) (a :: κ).
(Category k, Object k a) =>
k a a
`id`
             \(LinearMap (fu,fv)) (Tensor (tu,tv))
          -> ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
  (LinearFunction (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMap LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
  (LinearFunction (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) w)
-> LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w
-> LinearFunction (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) w
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap (Scalar (g p)) (f p) (LinearMap (Scalar (g p)) u w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap (Scalar (g p)) (f p) (LinearMap (Scalar (g p)) u w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
-> Coercion
     (LinearMap
        (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (f p) (LinearMap (Scalar (g p)) u w))
-> Coercion
     (LinearMap
        (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (g p)) (DualVector u) w)
  (LinearMap (Scalar (g p)) u w)
-> Coercion
     (LinearMap
        (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (f p) (LinearMap (Scalar (g p)) u w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (Tensor (Scalar (g p)) (DualVector u) w)
  (LinearMap (Scalar (g p)) u w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (LinearMap
     (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w)
-> LinearMap
     (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w)
-> LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (f p) u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  (Scalar (g p)) (f p) (Tensor (Scalar (g p)) (DualVector u) w)
fu)LinearFunction (Scalar (g p)) (Tensor (Scalar (f p)) (f p) u) w
-> Tensor (Scalar (f p)) (f p) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (f p)) (f p) u
tu)
           w -> w -> w
forall v. AdditiveGroup v => v -> v -> v
^+^ ((LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
  (LinearFunction (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMap LinearFunction
  (Scalar (g p))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
  (LinearFunction (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
-> LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w
-> LinearFunction (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w
forall s v w. LinearFunction s v w -> v -> w
-+$> Coercion
  (LinearMap (Scalar (g p)) (g p) (LinearMap (Scalar (g p)) u w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
forall u v w s.
(LinearSpace u, Scalar u ~ s) =>
Coercion
  (LinearMap s u (LinearMap s v w)) (LinearMap s (Tensor s u v) w)
uncurryLinearMap Coercion
  (LinearMap (Scalar (g p)) (g p) (LinearMap (Scalar (g p)) u w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
-> Coercion
     (LinearMap
        (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (g p) (LinearMap (Scalar (g p)) u w))
-> Coercion
     (LinearMap
        (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar (g p)) (DualVector u) w)
  (LinearMap (Scalar (g p)) u w)
-> Coercion
     (LinearMap
        (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w))
     (LinearMap (Scalar (g p)) (g p) (LinearMap (Scalar (g p)) u w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap Coercion
  (Tensor (Scalar (g p)) (DualVector u) w)
  (LinearMap (Scalar (g p)) u w)
forall s v w.
Coercion (Tensor s (DualVector v) w) (LinearMap s v w)
fromTensor Coercion
  (LinearMap
     (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w))
  (LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w)
-> LinearMap
     (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w)
-> LinearMap (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  (Scalar (g p)) (g p) (Tensor (Scalar (g p)) (DualVector u) w)
fv)LinearFunction (Scalar (g p)) (Tensor (Scalar (g p)) (g p) u) w
-> Tensor (Scalar (g p)) (g p) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Tensor (Scalar (g p)) (g p) u
tv)
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError


newtype GenericNeedle' m
    = GenericNeedle' { GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' :: DualVector (Needle (VRep m)) }
        deriving ((forall x. GenericNeedle' m -> Rep (GenericNeedle' m) x)
-> (forall x. Rep (GenericNeedle' m) x -> GenericNeedle' m)
-> Generic (GenericNeedle' m)
forall x. Rep (GenericNeedle' m) x -> GenericNeedle' m
forall x. GenericNeedle' m -> Rep (GenericNeedle' m) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall m x. Rep (GenericNeedle' m) x -> GenericNeedle' m
forall m x. GenericNeedle' m -> Rep (GenericNeedle' m) x
$cto :: forall m x. Rep (GenericNeedle' m) x -> GenericNeedle' m
$cfrom :: forall m x. GenericNeedle' m -> Rep (GenericNeedle' m) x
Generic)
instance AdditiveGroup (DualVector (Needle (VRep m)))
      => AdditiveGroup (GenericNeedle' m)
instance ( VectorSpace (DualVector (Needle (VRep m)))
         , Scalar (Needle m) ~ Scalar (DualVector (Needle (VRep m))) )
      => VectorSpace (GenericNeedle' m) where
  type Scalar (GenericNeedle' m) = Scalar (Needle m)
instance AdditiveGroup (DualVector (Needle (VRep m)))
      => AffineSpace (GenericNeedle' m) where
  type Diff (GenericNeedle' m) = GenericNeedle' m
  .-. :: GenericNeedle' m -> GenericNeedle' m -> Diff (GenericNeedle' m)
(.-.) = GenericNeedle' m -> GenericNeedle' m -> Diff (GenericNeedle' m)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
  .+^ :: GenericNeedle' m -> Diff (GenericNeedle' m) -> GenericNeedle' m
(.+^) = GenericNeedle' m -> Diff (GenericNeedle' m) -> GenericNeedle' m
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance AdditiveGroup (DualVector (Needle (VRep m)))
    => Semimanifold (GenericNeedle' m) where
  type Needle (GenericNeedle' m) = GenericNeedle' m
#if !MIN_VERSION_manifolds_core(0,6,0)
  type Interior (GenericNeedle' m) = GenericNeedle' m
  toInterior = pure
  fromInterior = id
  translateP = Tagged (^+^)
#endif
  .+~^ :: GenericNeedle' m -> Needle (GenericNeedle' m) -> GenericNeedle' m
(.+~^) = GenericNeedle' m -> Needle (GenericNeedle' m) -> GenericNeedle' m
forall v. AdditiveGroup v => v -> v -> v
(^+^)
instance AdditiveGroup (DualVector (Needle (VRep m)))
    => PseudoAffine (GenericNeedle' m) where
  GenericNeedle' m
p.-~. :: GenericNeedle' m
-> GenericNeedle' m -> Maybe (Needle (GenericNeedle' m))
.-~.GenericNeedle' m
q = GenericNeedle' m -> Maybe (GenericNeedle' m)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a.
(Applicative f r t, Object r a, Object t (f a)) =>
t a (f a)
pure (GenericNeedle' m
pGenericNeedle' m -> GenericNeedle' m -> GenericNeedle' m
forall v. AdditiveGroup v => v -> v -> v
^-^GenericNeedle' m
q)
  .-~! :: GenericNeedle' m -> GenericNeedle' m -> Needle (GenericNeedle' m)
(.-~!) = GenericNeedle' m -> GenericNeedle' m -> Needle (GenericNeedle' m)
forall v. AdditiveGroup v => v -> v -> v
(^-^)
instance  m . ( Semimanifold m, TensorSpace (DualVector (Needle (VRep m)))
               , Scalar (Needle m) ~ Scalar (DualVector (Needle (VRep m))) )
                  => TensorSpace (GenericNeedle' m) where
  type TensorProduct (GenericNeedle' m) w
         = TensorProduct (DualVector (Needle (VRep m))) w
  wellDefinedVector :: GenericNeedle' m -> Maybe (GenericNeedle' m)
wellDefinedVector = (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Maybe (DualVector (Needle (VRep m))) -> Maybe (GenericNeedle' m)
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' (Maybe (DualVector (Needle (VRep m))) -> Maybe (GenericNeedle' m))
-> (GenericNeedle' m -> Maybe (DualVector (Needle (VRep m))))
-> GenericNeedle' m
-> Maybe (GenericNeedle' m)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. DualVector (Needle (VRep m))
-> Maybe (DualVector (Needle (VRep m)))
forall v. TensorSpace v => v -> Maybe v
wellDefinedVector (DualVector (Needle (VRep m))
 -> Maybe (DualVector (Needle (VRep m))))
-> (GenericNeedle' m -> DualVector (Needle (VRep m)))
-> GenericNeedle' m
-> Maybe (DualVector (Needle (VRep m)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle'
  wellDefinedTensor :: (GenericNeedle' m ⊗ w) -> Maybe (GenericNeedle' m ⊗ w)
wellDefinedTensor = Coercion
  (Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w))
  (Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
-> Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
-> Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Coercion
     (Maybe
        (Tensor
           (Scalar (DualVector (Needle (VRep m))))
           (DualVector (Needle (VRep m)))
           w))
     (Maybe
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap (Coercion
   (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      w)
   (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
 -> Coercion
      (Maybe
         (Tensor
            (Scalar (DualVector (Needle (VRep m))))
            (DualVector (Needle (VRep m)))
            w))
      (Maybe
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Coercion
     (Maybe
        (Tensor
           (Scalar (DualVector (Needle (VRep m))))
           (DualVector (Needle (VRep m)))
           w))
     (Maybe
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle')
                         (Maybe
   (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      w)
 -> Maybe
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
    -> Maybe
         (Tensor
            (Scalar (DualVector (Needle (VRep m))))
            (DualVector (Needle (VRep m)))
            w))
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Tensor
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  w
-> Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> Maybe (v ⊗ w)
wellDefinedTensor (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (DualVector (Needle (VRep m)))
   w
 -> Maybe
      (Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (DualVector (Needle (VRep m)))
         w))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
    -> Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (DualVector (Needle (VRep m)))
         w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Maybe
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle')
  scalarSpaceWitness :: ScalarSpaceWitness (GenericNeedle' m)
scalarSpaceWitness = case ScalarSpaceWitness (DualVector (Needle (VRep m)))
forall v. TensorSpace v => ScalarSpaceWitness v
scalarSpaceWitness
                    :: ScalarSpaceWitness (DualVector (Needle (VRep m))) of
          ScalarSpaceWitness (DualVector (Needle (VRep m)))
ScalarSpaceWitness -> ScalarSpaceWitness (GenericNeedle' m)
forall v.
(Num' (Scalar v), Scalar (Scalar v) ~ Scalar v) =>
ScalarSpaceWitness v
ScalarSpaceWitness
  linearManifoldWitness :: LinearManifoldWitness (GenericNeedle' m)
linearManifoldWitness = case LinearManifoldWitness (DualVector (Needle (VRep m)))
forall v. TensorSpace v => LinearManifoldWitness v
linearManifoldWitness
                    :: LinearManifoldWitness (DualVector (Needle (VRep m))) of
          LinearManifoldWitness (DualVector (Needle (VRep m)))
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
           BoundarylessWitness
#endif
              -> LinearManifoldWitness (GenericNeedle' m)
forall v.
(Needle v ~ v, AffineSpace v, Diff v ~ v) =>
LinearManifoldWitness v
LinearManifoldWitness
#if !MIN_VERSION_manifolds_core(0,6,0)
                  BoundarylessWitness
#endif
  zeroTensor :: GenericNeedle' m ⊗ w
zeroTensor = (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
v ⊗ w
zeroTensor
  toFlatTensor :: GenericNeedle' m -+> (GenericNeedle' m ⊗ Scalar (GenericNeedle' m))
toFlatTensor = (GenericNeedle' m
 -> Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (GenericNeedle' m)
      (Scalar (DualVector (Needle (VRep m)))))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((GenericNeedle' m
  -> Tensor
       (Scalar (DualVector (Needle (VRep m))))
       (GenericNeedle' m)
       (Scalar (DualVector (Needle (VRep m)))))
 -> LinearFunction
      (Scalar (DualVector (Needle (VRep m))))
      (GenericNeedle' m)
      (Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (GenericNeedle' m)
         (Scalar (DualVector (Needle (VRep m))))))
-> (GenericNeedle' m
    -> Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (GenericNeedle' m)
         (Scalar (DualVector (Needle (VRep m)))))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m)))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m))))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle')
                             (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (DualVector (Needle (VRep m)))
   (Scalar (DualVector (Needle (VRep m))))
 -> Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (GenericNeedle' m)
      (Scalar (DualVector (Needle (VRep m)))))
-> (GenericNeedle' m
    -> Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (DualVector (Needle (VRep m)))
         (Scalar (DualVector (Needle (VRep m)))))
-> GenericNeedle' m
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
-> DualVector (Needle (VRep m))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
forall v. TensorSpace v => v -+> (v ⊗ Scalar v)
toFlatTensor
                             (DualVector (Needle (VRep m))
 -> Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      (Scalar (DualVector (Needle (VRep m)))))
-> (GenericNeedle' m -> DualVector (Needle (VRep m)))
-> GenericNeedle' m
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle'
  fromFlatTensor :: (GenericNeedle' m ⊗ Scalar (GenericNeedle' m)) -+> GenericNeedle' m
fromFlatTensor = (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (GenericNeedle' m)
   (Scalar (DualVector (Needle (VRep m))))
 -> GenericNeedle' m)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
     (GenericNeedle' m)
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Tensor
    (Scalar (DualVector (Needle (VRep m))))
    (GenericNeedle' m)
    (Scalar (DualVector (Needle (VRep m))))
  -> GenericNeedle' m)
 -> LinearFunction
      (Scalar (DualVector (Needle (VRep m))))
      (Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (GenericNeedle' m)
         (Scalar (DualVector (Needle (VRep m)))))
      (GenericNeedle' m))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (GenericNeedle' m)
      (Scalar (DualVector (Needle (VRep m))))
    -> GenericNeedle' m)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
     (GenericNeedle' m)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m)))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (GenericNeedle' m)
        (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        (Scalar (DualVector (Needle (VRep m)))))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle')
                             (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (GenericNeedle' m)
   (Scalar (DualVector (Needle (VRep m))))
 -> Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      (Scalar (DualVector (Needle (VRep m)))))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      (Scalar (DualVector (Needle (VRep m))))
    -> GenericNeedle' m)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (GenericNeedle' m)
     (Scalar (DualVector (Needle (VRep m))))
-> GenericNeedle' m
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
  (DualVector (Needle (VRep m)))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
-> DualVector (Needle (VRep m))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m)))))
  (DualVector (Needle (VRep m)))
forall v. TensorSpace v => (v ⊗ Scalar v) -+> v
fromFlatTensor
                             (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (DualVector (Needle (VRep m)))
   (Scalar (DualVector (Needle (VRep m))))
 -> DualVector (Needle (VRep m)))
-> (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     (Scalar (DualVector (Needle (VRep m))))
-> GenericNeedle' m
forall (k :: * -> * -> *) a b c.
(Category k, Object k a, Object k b, Object k c) =>
k a b -> k b c -> k a c
>>> DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle'
  addTensors :: (GenericNeedle' m ⊗ w)
-> (GenericNeedle' m ⊗ w) -> GenericNeedle' m ⊗ w
addTensors (Tensor TensorProduct (GenericNeedle' m) w
s) (Tensor TensorProduct (GenericNeedle' m) w
t)
       = (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
addTensors (TensorProduct (DualVector (Needle (VRep m))) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (GenericNeedle' m) w
TensorProduct (DualVector (Needle (VRep m))) w
s) (TensorProduct (DualVector (Needle (VRep m))) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (GenericNeedle' m) w
TensorProduct (DualVector (Needle (VRep m))) w
t)
  subtractTensors :: (GenericNeedle' m ⊗ w)
-> (GenericNeedle' m ⊗ w) -> GenericNeedle' m ⊗ w
subtractTensors (Tensor TensorProduct (GenericNeedle' m) w
s) (Tensor TensorProduct (GenericNeedle' m) w
t)
       = (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall v w.
(TensorSpace v, TensorSpace v, TensorSpace w,
 Scalar w ~ Scalar v) =>
(v ⊗ w) -> (v ⊗ w) -> v ⊗ w
subtractTensors (TensorProduct (DualVector (Needle (VRep m))) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (GenericNeedle' m) w
TensorProduct (DualVector (Needle (VRep m))) w
s) (TensorProduct (DualVector (Needle (VRep m))) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall s v w. TensorProduct v w -> Tensor s v w
Tensor TensorProduct (GenericNeedle' m) w
TensorProduct (DualVector (Needle (VRep m))) w
t)
  scaleTensor :: Bilinear
  (Scalar (GenericNeedle' m))
  (GenericNeedle' m ⊗ w)
  (GenericNeedle' m ⊗ w)
scaleTensor = (Scalar (DualVector (Needle (VRep m)))
 -> LinearFunction
      (Scalar (Scalar (DualVector (Needle (VRep m)))))
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Scalar (DualVector (Needle (VRep m))))
     (LinearFunction
        (Scalar (Scalar (DualVector (Needle (VRep m)))))
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction ((Scalar (DualVector (Needle (VRep m)))
  -> LinearFunction
       (Scalar (Scalar (DualVector (Needle (VRep m)))))
       (Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
       (Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
 -> LinearFunction
      (Scalar (Scalar (DualVector (Needle (VRep m)))))
      (Scalar (DualVector (Needle (VRep m))))
      (LinearFunction
         (Scalar (Scalar (DualVector (Needle (VRep m)))))
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)))
-> (Scalar (DualVector (Needle (VRep m)))
    -> LinearFunction
         (Scalar (Scalar (DualVector (Needle (VRep m)))))
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Scalar (DualVector (Needle (VRep m))))
     (LinearFunction
        (Scalar (Scalar (DualVector (Needle (VRep m)))))
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \Scalar (DualVector (Needle (VRep m)))
μ -> (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle'
                                         (LinearFunction
   (Scalar (Scalar (DualVector (Needle (VRep m)))))
   (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      w)
   (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      w)
 -> LinearFunction
      (Scalar (Scalar (DualVector (Needle (VRep m)))))
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearFunction
  (Scalar (Scalar (DualVector (Needle (VRep m)))))
  (Scalar (DualVector (Needle (VRep m))))
  (LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (Scalar v) (v ⊗ w) (v ⊗ w)
scaleTensorLinearFunction
  (Scalar (Scalar (DualVector (Needle (VRep m)))))
  (Scalar (DualVector (Needle (VRep m))))
  (LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w))
-> Scalar (DualVector (Needle (VRep m)))
-> LinearFunction
     (Scalar (Scalar (DualVector (Needle (VRep m)))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall s v w. LinearFunction s v w -> v -> w
-+$>Scalar (DualVector (Needle (VRep m)))
μ
  negateTensor :: (GenericNeedle' m ⊗ w) -+> (GenericNeedle' m ⊗ w)
negateTensor = (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (v ⊗ w)
negateTensor
  tensorProduct :: Bilinear (GenericNeedle' m) w (GenericNeedle' m ⊗ w)
tensorProduct = (GenericNeedle' m
 -> w
 -> Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> LinearFunction
     (Scalar (Needle m))
     (GenericNeedle' m)
     (LinearFunction
        (Scalar (Needle m))
        w
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericNeedle' m
  -> w
  -> Tensor
       (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
 -> LinearFunction
      (Scalar (Needle m))
      (GenericNeedle' m)
      (LinearFunction
         (Scalar (Needle m))
         w
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)))
-> (GenericNeedle' m
    -> w
    -> Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> LinearFunction
     (Scalar (Needle m))
     (GenericNeedle' m)
     (LinearFunction
        (Scalar (Needle m))
        w
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericNeedle' DualVector (Needle (VRep m))
v) w
w
                      -> (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle'
                           Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     w
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear v w (v ⊗ w)
tensorProductLinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     w
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w))
-> DualVector (Needle (VRep m))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     w
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (Needle (VRep m))
v)LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  w
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
-> w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall s v w. LinearFunction s v w -> v -> w
-+$>w
w
  transposeTensor :: (GenericNeedle' m ⊗ w) -+> (w ⊗ GenericNeedle' m)
transposeTensor = (GenericNeedle' m ⊗ w) -+> (w ⊗ GenericNeedle' m)
forall w.
(TensorSpace w, Scalar w ~ Scalar (Needle m)) =>
(GenericNeedle' m ⊗ w) -+> (w ⊗ GenericNeedle' m)
tT
   where tT ::  w . (TensorSpace w, Scalar w ~ Scalar (Needle m))
                => (GenericNeedle' m  w) -+> (w  GenericNeedle' m)
         tT :: (GenericNeedle' m ⊗ w) -+> (w ⊗ GenericNeedle' m)
tT = (Tensor
   (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
 -> Tensor
      (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction
           ((Tensor
    (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
  -> Tensor
       (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
 -> LinearFunction
      (Scalar (DualVector (Needle (VRep m))))
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m)))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
    -> Tensor
         (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Coercion
  (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
-> Tensor (Scalar w) w (DualVector (Needle (VRep m)))
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m)
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr (Coercion
  (TensorProduct w (GenericNeedle' m))
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion Coercion
  (TensorProduct w (GenericNeedle' m))
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
-> Coercion
     (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
     (TensorProduct w (GenericNeedle' m))
-> Coercion
     (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. [w]
-> Coercion (DualVector (Needle (VRep m))) (GenericNeedle' m)
-> Coercion
     (TensorProduct w (DualVector (Needle (VRep m))))
     (TensorProduct w (GenericNeedle' m))
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct ([]::[w])
                              (Coercion (DualVector (Needle (VRep m))) (GenericNeedle' m)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion :: Coercion (DualVector (Needle (VRep m)))
                                                    (GenericNeedle' m)) Coercion
  (TensorProduct w (DualVector (Needle (VRep m))))
  (TensorProduct w (GenericNeedle' m))
-> Coercion
     (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
     (TensorProduct w (DualVector (Needle (VRep m))))
-> Coercion
     (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
     (TensorProduct w (GenericNeedle' m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
  (TensorProduct w (DualVector (Needle (VRep m))))
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion)
              (Tensor (Scalar w) w (DualVector (Needle (VRep m)))
 -> Tensor
      (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
    -> Tensor (Scalar w) w (DualVector (Needle (VRep m))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) w (GenericNeedle' m)
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
-> Tensor (Scalar w) w (DualVector (Needle (VRep m)))
forall s v w. LinearFunction s v w -> v -> w
getLinearFunction LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
  (Tensor (Scalar w) w (DualVector (Needle (VRep m))))
forall v w.
(TensorSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) -+> (w ⊗ v)
transposeTensor (Tensor
   (Scalar (DualVector (Needle (VRep m))))
   (DualVector (Needle (VRep m)))
   w
 -> Tensor (Scalar w) w (DualVector (Needle (VRep m))))
-> (Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
    -> Tensor
         (Scalar (DualVector (Needle (VRep m))))
         (DualVector (Needle (VRep m)))
         w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Tensor (Scalar w) w (DualVector (Needle (VRep m)))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall (a :: * -> * -> *) (k :: * -> * -> *) b c.
(EnhancedCat a k, Object k b, Object k c, Object a b,
 Object a c) =>
k b c -> a b c
arr ((GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle')
  fmapTensor :: Bilinear (w -+> x) (GenericNeedle' m ⊗ w) (GenericNeedle' m ⊗ x)
fmapTensor = ((w -+> x)
 -> LinearFunction
      (Scalar (DualVector (Needle (VRep m))))
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
      (Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (w -+> x)
     (LinearFunction
        (Scalar (DualVector (Needle (VRep m))))
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x))
forall s v w. (v -> w) -> LinearFunction s v w
LinearFunction (((w -+> x)
  -> LinearFunction
       (Scalar (DualVector (Needle (VRep m))))
       (Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
       (Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x))
 -> LinearFunction
      (Scalar (DualVector (Needle (VRep m))))
      (w -+> x)
      (LinearFunction
         (Scalar (DualVector (Needle (VRep m))))
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)))
-> ((w -+> x)
    -> LinearFunction
         (Scalar (DualVector (Needle (VRep m))))
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (w -+> x)
     (LinearFunction
        (Scalar (DualVector (Needle (VRep m))))
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \w -+> x
f -> (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
forall v w v' w' (c :: * -> * -> *) s' s.
(TensorProduct v w ~ TensorProduct v' w,
 TensorProduct v w' ~ TensorProduct v' w') =>
c v v'
-> LinearFunction s' (Tensor s v w) (Tensor s v w')
-> LinearFunction s' (Tensor s v' w) (Tensor s v' w')
envTensorLHSCoercion DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle' (LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x))
forall v w x.
(TensorSpace v, TensorSpace w, TensorSpace x, Scalar w ~ Scalar v,
 Scalar x ~ Scalar v) =>
Bilinear (w -+> x) (v ⊗ w) (v ⊗ x)
fmapTensorLinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (w -+> x)
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x))
-> (w -+> x)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
forall s v w. LinearFunction s v w -> v -> w
-+$>w -+> x
f)
  fzipTensorWith :: Bilinear
  ((w, x) -+> u)
  (GenericNeedle' m ⊗ w, GenericNeedle' m ⊗ x)
  (GenericNeedle' m ⊗ u)
fzipTensorWith = (((w, x) -+> u)
 -> (Tensor
       (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
     Tensor
       (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
 -> Tensor
      (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
         Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u))
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((((w, x) -+> u)
  -> (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
      Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
  -> Tensor
       (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)
 -> LinearFunction
      (Scalar u)
      ((w, x) -+> u)
      (LinearFunction
         (Scalar u)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
          Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
         (Tensor
            (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)))
-> (((w, x) -+> u)
    -> (Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
        Tensor
          (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
    -> Tensor
         (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)
-> LinearFunction
     (Scalar u)
     ((w, x) -+> u)
     (LinearFunction
        (Scalar u)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w,
         Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
        (Tensor
           (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u))
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$
         \(w, x) -+> u
f (Tensor (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
wt, Tensor (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x
xt) -> (DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle'
                        Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     u)
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     u
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ (LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w,
      Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u))
forall v u w x.
(TensorSpace v, TensorSpace u, TensorSpace w, TensorSpace x,
 Scalar u ~ Scalar v, Scalar w ~ Scalar v, Scalar x ~ Scalar v) =>
Bilinear ((w, x) -+> u) (v ⊗ w, v ⊗ x) (v ⊗ u)
fzipTensorWithLinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  ((w, x) -+> u)
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w,
      Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u))
-> ((w, x) -+> u)
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m))))
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w,
      Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
forall s v w. LinearFunction s v w -> v -> w
-+$>(w, x) -+> u
f)
                         LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w,
   Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     x)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     u)
-> (Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      w,
    Tensor
      (Scalar (DualVector (Needle (VRep m))))
      (DualVector (Needle (VRep m)))
      x)
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     u
forall s v w. LinearFunction s v w -> v -> w
-+$>( (GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     w
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) w
wt
                             , (GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor
        (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        x)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' Coercion
  (Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x)
  (Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     x)
-> Tensor
     (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x
-> Tensor
     (Scalar (DualVector (Needle (VRep m))))
     (DualVector (Needle (VRep m)))
     x
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor (Scalar (DualVector (Needle (VRep m)))) (GenericNeedle' m) x
xt )
  coerceFmapTensorProduct :: p (GenericNeedle' m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle' m) a)
     (TensorProduct (GenericNeedle' m) b)
coerceFmapTensorProduct = p (GenericNeedle' m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle' m) a)
     (TensorProduct (GenericNeedle' m) b)
forall (p :: * -> *) a b.
Functor p =>
p (GenericNeedle' m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle' m) a)
     (TensorProduct (GenericNeedle' m) b)
cmtp
   where cmtp ::  p a b . Hask.Functor p
             => p (GenericNeedle' m) -> Coercion a b
               -> Coercion (TensorProduct (GenericNeedle' m) a)
                           (TensorProduct (GenericNeedle' m) b)
         cmtp :: p (GenericNeedle' m)
-> Coercion a b
-> Coercion
     (TensorProduct (GenericNeedle' m) a)
     (TensorProduct (GenericNeedle' m) b)
cmtp p (GenericNeedle' m)
p Coercion a b
crc = case [DualVector (Needle (VRep m))]
-> Coercion a b
-> Coercion
     (TensorProduct (DualVector (Needle (VRep m))) a)
     (TensorProduct (DualVector (Needle (VRep m))) b)
forall v (p :: * -> *) a b.
(TensorSpace v, Functor p) =>
p v
-> Coercion a b -> Coercion (TensorProduct v a) (TensorProduct v b)
coerceFmapTensorProduct
                              ([]::[DualVector (Needle (VRep m))]) Coercion a b
crc of
                  Coercion
  (TensorProduct (DualVector (Needle (VRep m))) a)
  (TensorProduct (DualVector (Needle (VRep m))) b)
Coercion -> Coercion
  (TensorProduct (GenericNeedle' m) a)
  (TensorProduct (GenericNeedle' m) b)
forall k (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion


instance  s m . ( Num' s
                 , Semimanifold m, LinearSpace (Needle (VRep m))
                 , Scalar (Needle m) ~ s
                 , Scalar (Needle (VRep m)) ~ s )
                  => LinearSpace (GenericNeedle m) where
  type DualVector (GenericNeedle m) = GenericNeedle' m
  linearId :: GenericNeedle m +> GenericNeedle m
linearId = Coercion (Needle (VRep m)) (GenericNeedle m)
-> Coercion
     (LinearMap s (GenericNeedle m) (Needle (VRep m)))
     (LinearMap s (GenericNeedle m) (GenericNeedle m))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Needle (VRep m) -> GenericNeedle m)
-> Coercion (Needle (VRep m)) (GenericNeedle m)
forall (k :: * -> * -> *) a b (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible a b, Object k a, Object k b) =>
p a b -> k a b
follow Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle) Coercion
  (LinearMap s (GenericNeedle m) (Needle (VRep m)))
  (LinearMap s (GenericNeedle m) (GenericNeedle m))
-> Coercion
     (LinearMap s (Needle (VRep m)) (Needle (VRep m)))
     (LinearMap s (GenericNeedle m) (Needle (VRep m)))
-> Coercion
     (LinearMap s (Needle (VRep m)) (Needle (VRep m)))
     (LinearMap s (GenericNeedle m) (GenericNeedle m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (GenericNeedle m -> Needle (VRep m))
-> Coercion
     (LinearMap s (Needle (VRep m)) (Needle (VRep m)))
     (LinearMap s (GenericNeedle m) (Needle (VRep m)))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle
               Coercion
  (LinearMap s (Needle (VRep m)) (Needle (VRep m)))
  (LinearMap s (GenericNeedle m) (GenericNeedle m))
-> LinearMap s (Needle (VRep m)) (Needle (VRep m))
-> LinearMap s (GenericNeedle m) (GenericNeedle m)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap s (Needle (VRep m)) (Needle (VRep m))
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  dualSpaceWitness :: DualSpaceWitness (GenericNeedle m)
dualSpaceWitness = case ( ClosedScalarWitness s
forall s. Num' s => ClosedScalarWitness s
closedScalarWitness :: ClosedScalarWitness s
                          , DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) ) of
              (ClosedScalarWitness s
ClosedScalarWitness, DualSpaceWitness (Needle (VRep m))
DualSpaceWitness) -> DualSpaceWitness (GenericNeedle m)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  applyDualVector :: Bilinear
  (DualVector (GenericNeedle m))
  (GenericNeedle m)
  (Scalar (GenericNeedle m))
applyDualVector = (GenericNeedle' m -> GenericNeedle m -> s)
-> LinearFunction
     (Scalar (Needle m))
     (GenericNeedle' m)
     (LinearFunction (Scalar (Needle m)) (GenericNeedle m) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericNeedle' m -> GenericNeedle m -> s)
 -> LinearFunction
      (Scalar (Needle m))
      (GenericNeedle' m)
      (LinearFunction (Scalar (Needle m)) (GenericNeedle m) s))
-> (GenericNeedle' m -> GenericNeedle m -> s)
-> LinearFunction
     (Scalar (Needle m))
     (GenericNeedle' m)
     (LinearFunction (Scalar (Needle m)) (GenericNeedle m) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericNeedle' DualVector (Needle (VRep m))
dv) (GenericNeedle Needle (VRep m)
v)
                        -> (LinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m)))) (Needle (VRep m)) s)
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  (Scalar (DualVector (Needle (VRep m))))
  (DualVector (Needle (VRep m)))
  (LinearFunction
     (Scalar (DualVector (Needle (VRep m)))) (Needle (VRep m)) s)
-> DualVector (Needle (VRep m))
-> LinearFunction
     (Scalar (DualVector (Needle (VRep m)))) (Needle (VRep m)) s
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (Needle (VRep m))
dv)LinearFunction
  (Scalar (DualVector (Needle (VRep m)))) (Needle (VRep m)) s
-> Needle (VRep m) -> s
forall s v w. LinearFunction s v w -> v -> w
-+$>Needle (VRep m)
v
  applyLinear :: Bilinear (GenericNeedle m +> w) (GenericNeedle m) w
applyLinear = (LinearMap s (GenericNeedle m) w -> GenericNeedle m -> w)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle m) w)
     (LinearFunction s (GenericNeedle m) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (GenericNeedle m) w -> GenericNeedle m -> w)
 -> LinearFunction
      s
      (LinearMap s (GenericNeedle m) w)
      (LinearFunction s (GenericNeedle m) w))
-> (LinearMap s (GenericNeedle m) w -> GenericNeedle m -> w)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle m) w)
     (LinearFunction s (GenericNeedle m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (GenericNeedle m)) w
f) (GenericNeedle Needle (VRep m)
v)
                      -> (LinearFunction
  s
  (LinearMap s (Needle (VRep m)) w)
  (LinearFunction s (Needle (VRep m)) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  s
  (LinearMap s (Needle (VRep m)) w)
  (LinearFunction s (Needle (VRep m)) w)
-> LinearMap s (Needle (VRep m)) w
-> LinearFunction s (Needle (VRep m)) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (Needle (VRep m))) w
-> LinearMap s (Needle (VRep m)) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Needle (VRep m))) w
TensorProduct (DualVector (GenericNeedle m)) w
f)LinearFunction s (Needle (VRep m)) w -> Needle (VRep m) -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>Needle (VRep m)
v
  tensorId :: (GenericNeedle m ⊗ w) +> (GenericNeedle m ⊗ w)
tensorId = Coercion
  (Tensor s (GenericNeedle m) w) (Tensor s (Needle (VRep m)) w)
-> Coercion
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w))
     (LinearMap
        s (Tensor s (GenericNeedle m) w) (Tensor s (GenericNeedle m) w))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap ((GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor s (GenericNeedle m) w) (Tensor s (Needle (VRep m)) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle)
                Coercion
  (LinearMap
     s (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w))
  (LinearMap
     s (Tensor s (GenericNeedle m) w) (Tensor s (GenericNeedle m) w))
-> Coercion
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w))
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w))
-> Coercion
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w))
     (LinearMap
        s (Tensor s (GenericNeedle m) w) (Tensor s (GenericNeedle m) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w)
-> Coercion
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w))
     (LinearMap
        s (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((Needle (VRep m) -> GenericNeedle m)
-> Coercion
     (Tensor s (Needle (VRep m)) w) (Tensor s (GenericNeedle m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS Needle (VRep m) -> GenericNeedle m
forall x. Needle (VRep x) -> GenericNeedle x
GenericNeedle) Coercion
  (LinearMap
     s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w))
  (LinearMap
     s (Tensor s (GenericNeedle m) w) (Tensor s (GenericNeedle m) w))
-> LinearMap
     s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w)
-> LinearMap
     s (Tensor s (GenericNeedle m) w) (Tensor s (GenericNeedle m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  s (Tensor s (Needle (VRep m)) w) (Tensor s (Needle (VRep m)) w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  applyTensorFunctional :: Bilinear
  (DualVector (GenericNeedle m ⊗ u))
  (GenericNeedle m ⊗ u)
  (Scalar (GenericNeedle m))
applyTensorFunctional = (LinearMap s (GenericNeedle m) (DualVector u)
 -> Tensor s (GenericNeedle m) u -> s)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle m) (DualVector u))
     (LinearFunction s (Tensor s (GenericNeedle m) u) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (GenericNeedle m) (DualVector u)
  -> Tensor s (GenericNeedle m) u -> s)
 -> LinearFunction
      s
      (LinearMap s (GenericNeedle m) (DualVector u))
      (LinearFunction s (Tensor s (GenericNeedle m) u) s))
-> (LinearMap s (GenericNeedle m) (DualVector u)
    -> Tensor s (GenericNeedle m) u -> s)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle m) (DualVector u))
     (LinearFunction s (Tensor s (GenericNeedle m) u) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (GenericNeedle m)) (DualVector u)
f) Tensor s (GenericNeedle m) u
t ->
              (LinearFunction
  s
  (LinearMap s (Needle (VRep m)) (DualVector u))
  (LinearFunction s (Tensor s (Needle (VRep m)) u) s)
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  s
  (LinearMap s (Needle (VRep m)) (DualVector u))
  (LinearFunction s (Tensor s (Needle (VRep m)) u) s)
-> LinearMap s (Needle (VRep m)) (DualVector u)
-> LinearFunction s (Tensor s (Needle (VRep m)) u) s
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (Needle (VRep m))) (DualVector u)
-> LinearMap s (Needle (VRep m)) (DualVector u)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Needle (VRep m))) (DualVector u)
TensorProduct (DualVector (GenericNeedle m)) (DualVector u)
f)
                 LinearFunction s (Tensor s (Needle (VRep m)) u) s
-> Tensor s (Needle (VRep m)) u -> s
forall s v w. LinearFunction s v w -> v -> w
-+$>(GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor s (GenericNeedle m) u) (Tensor s (Needle (VRep m)) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle Coercion
  (Tensor s (GenericNeedle m) u) (Tensor s (Needle (VRep m)) u)
-> Tensor s (GenericNeedle m) u -> Tensor s (Needle (VRep m)) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (GenericNeedle m) u
t
  applyTensorLinMap :: Bilinear ((GenericNeedle m ⊗ u) +> w) (GenericNeedle m ⊗ u) w
applyTensorLinMap = (LinearMap s (Tensor s (GenericNeedle m) u) w
 -> Tensor s (GenericNeedle m) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (GenericNeedle m) u) w)
     (LinearFunction s (Tensor s (GenericNeedle m) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (Tensor s (GenericNeedle m) u) w
  -> Tensor s (GenericNeedle m) u -> w)
 -> LinearFunction
      s
      (LinearMap s (Tensor s (GenericNeedle m) u) w)
      (LinearFunction s (Tensor s (GenericNeedle m) u) w))
-> (LinearMap s (Tensor s (GenericNeedle m) u) w
    -> Tensor s (GenericNeedle m) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (GenericNeedle m) u) w)
     (LinearFunction s (Tensor s (GenericNeedle m) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Tensor s (GenericNeedle m) u)) w
f) Tensor s (GenericNeedle m) u
t
                -> (LinearFunction
  s
  (LinearMap
     s (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u) w)
  (LinearFunction s (Tensor s (Needle (VRep m)) u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  s
  (LinearMap
     s (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u) w)
  (LinearFunction s (Tensor s (Needle (VRep m)) u) w)
-> LinearMap
     s (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u) w
-> LinearFunction s (Tensor s (Needle (VRep m)) u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct
  (DualVector
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u))
  w
-> LinearMap
     s (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Tensor s (GenericNeedle m) u)) w
TensorProduct
  (DualVector
     (Tensor (Scalar (Needle (VRep m))) (Needle (VRep m)) u))
  w
f)
                    LinearFunction s (Tensor s (Needle (VRep m)) u) w
-> Tensor s (Needle (VRep m)) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>(GenericNeedle m -> Needle (VRep m))
-> Coercion
     (Tensor s (GenericNeedle m) u) (Tensor s (Needle (VRep m)) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle m -> Needle (VRep m)
forall x. GenericNeedle x -> Needle (VRep x)
getGenericNeedle Coercion
  (Tensor s (GenericNeedle m) u) (Tensor s (Needle (VRep m)) u)
-> Tensor s (GenericNeedle m) u -> Tensor s (Needle (VRep m)) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (GenericNeedle m) u
t
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError

instance  s m . ( Num' s
                 , Semimanifold m
                 , LinearSpace (Needle (VRep m))
                 , TensorSpace (DualVector (Needle (VRep m)))
                 , Scalar (Needle m) ~ s
                 , Scalar (Needle (VRep m)) ~ s
                 , Scalar (DualVector (Needle (VRep m))) ~ s )
                  => LinearSpace (GenericNeedle' m) where
  type DualVector (GenericNeedle' m) = GenericNeedle m
  linearId :: GenericNeedle' m +> GenericNeedle' m
linearId = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> Coercion (DualVector (Needle (VRep m))) (GenericNeedle' m)
-> Coercion
     (LinearMap s (GenericNeedle' m) (DualVector (Needle (VRep m))))
     (LinearMap s (GenericNeedle' m) (GenericNeedle' m))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion (DualVector (Needle (VRep m))) (GenericNeedle' m)
forall (k :: * -> * -> *) a b (p :: * -> * -> *).
(EnhancedCat k Coercion, Coercible a b, Object k a, Object k b) =>
p a b -> k a b
follow DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle')
                         Coercion
  (LinearMap s (GenericNeedle' m) (DualVector (Needle (VRep m))))
  (LinearMap s (GenericNeedle' m) (GenericNeedle' m))
-> Coercion
     (LinearMap
        s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m))))
     (LinearMap s (GenericNeedle' m) (DualVector (Needle (VRep m))))
-> Coercion
     (LinearMap
        s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m))))
     (LinearMap s (GenericNeedle' m) (GenericNeedle' m))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. (GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (LinearMap
        s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m))))
     (LinearMap s (GenericNeedle' m) (DualVector (Needle (VRep m))))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' Coercion
  (LinearMap
     s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m))))
  (LinearMap s (GenericNeedle' m) (GenericNeedle' m))
-> LinearMap
     s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m)))
-> LinearMap s (GenericNeedle' m) (GenericNeedle' m)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  s (DualVector (Needle (VRep m))) (DualVector (Needle (VRep m)))
forall v. LinearSpace v => LinearMap (Scalar v) v v
linearId
  dualSpaceWitness :: DualSpaceWitness (GenericNeedle' m)
dualSpaceWitness = case ( ClosedScalarWitness s
forall s. Num' s => ClosedScalarWitness s
closedScalarWitness :: ClosedScalarWitness s
                          , DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) ) of
              (ClosedScalarWitness s
ClosedScalarWitness, DualSpaceWitness (Needle (VRep m))
DualSpaceWitness) -> DualSpaceWitness (GenericNeedle' m)
forall v.
(LinearSpace (Scalar v), DualVector (Scalar v) ~ Scalar v,
 LinearSpace (DualVector v), Scalar (DualVector v) ~ Scalar v,
 DualVector (DualVector v) ~ v) =>
DualSpaceWitness v
DualSpaceWitness
  applyDualVector :: Bilinear
  (DualVector (GenericNeedle' m))
  (GenericNeedle' m)
  (Scalar (GenericNeedle' m))
applyDualVector = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> (GenericNeedle m -> GenericNeedle' m -> s)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (LinearFunction (Scalar (Needle (VRep m))) (GenericNeedle' m) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((GenericNeedle m -> GenericNeedle' m -> s)
 -> LinearFunction
      (Scalar (Needle (VRep m)))
      (GenericNeedle m)
      (LinearFunction (Scalar (Needle (VRep m))) (GenericNeedle' m) s))
-> (GenericNeedle m -> GenericNeedle' m -> s)
-> LinearFunction
     (Scalar (Needle (VRep m)))
     (GenericNeedle m)
     (LinearFunction (Scalar (Needle (VRep m))) (GenericNeedle' m) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(GenericNeedle Needle (VRep m)
dv) (GenericNeedle' DualVector (Needle (VRep m))
v)
                        -> (LinearFunction
  s
  (Needle (VRep m))
  (LinearFunction s (DualVector (Needle (VRep m))) s)
forall v.
(LinearSpace v, LinearSpace v) =>
Bilinear (DualVector v) v (Scalar v)
applyDualVectorLinearFunction
  s
  (Needle (VRep m))
  (LinearFunction s (DualVector (Needle (VRep m))) s)
-> Needle (VRep m)
-> LinearFunction s (DualVector (Needle (VRep m))) s
forall s v w. LinearFunction s v w -> v -> w
-+$>Needle (VRep m)
dv)LinearFunction s (DualVector (Needle (VRep m))) s
-> DualVector (Needle (VRep m)) -> s
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (Needle (VRep m))
v
  applyLinear :: Bilinear (GenericNeedle' m +> w) (GenericNeedle' m) w
applyLinear = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> (LinearMap s (GenericNeedle' m) w -> GenericNeedle' m -> w)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle' m) w)
     (LinearFunction s (GenericNeedle' m) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (GenericNeedle' m) w -> GenericNeedle' m -> w)
 -> LinearFunction
      s
      (LinearMap s (GenericNeedle' m) w)
      (LinearFunction s (GenericNeedle' m) w))
-> (LinearMap s (GenericNeedle' m) w -> GenericNeedle' m -> w)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle' m) w)
     (LinearFunction s (GenericNeedle' m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (GenericNeedle' m)) w
f) (GenericNeedle' DualVector (Needle (VRep m))
v)
                      -> (LinearFunction
  s
  (LinearMap s (DualVector (Needle (VRep m))) w)
  (LinearFunction s (DualVector (Needle (VRep m))) w)
forall v w.
(LinearSpace v, TensorSpace w, Scalar w ~ Scalar v) =>
Bilinear (v +> w) v w
applyLinearLinearFunction
  s
  (LinearMap s (DualVector (Needle (VRep m))) w)
  (LinearFunction s (DualVector (Needle (VRep m))) w)
-> LinearMap s (DualVector (Needle (VRep m))) w
-> LinearFunction s (DualVector (Needle (VRep m))) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct (DualVector (DualVector (Needle (VRep m)))) w
-> LinearMap s (DualVector (Needle (VRep m))) w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (GenericNeedle' m)) w
TensorProduct (DualVector (DualVector (Needle (VRep m)))) w
f)LinearFunction s (DualVector (Needle (VRep m))) w
-> DualVector (Needle (VRep m)) -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>DualVector (Needle (VRep m))
v
  tensorId :: (GenericNeedle' m ⊗ w) +> (GenericNeedle' m ⊗ w)
tensorId = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> Coercion
  (Tensor s (GenericNeedle' m) w)
  (Tensor s (DualVector (Needle (VRep m))) w)
-> Coercion
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (GenericNeedle' m) w))
     (LinearMap
        s (Tensor s (GenericNeedle' m) w) (Tensor s (GenericNeedle' m) w))
forall v w v' (c :: * -> * -> *) s.
(TensorProduct (DualVector v) w
 ~ TensorProduct (DualVector v') w) =>
c v' v -> Coercion (LinearMap s v w) (LinearMap s v' w)
pseudoPrecomposeLinmap ((GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor s (GenericNeedle' m) w)
     (Tensor s (DualVector (Needle (VRep m))) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle')
                Coercion
  (LinearMap
     s
     (Tensor s (DualVector (Needle (VRep m))) w)
     (Tensor s (GenericNeedle' m) w))
  (LinearMap
     s (Tensor s (GenericNeedle' m) w) (Tensor s (GenericNeedle' m) w))
-> Coercion
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (DualVector (Needle (VRep m))) w))
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (GenericNeedle' m) w))
-> Coercion
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (DualVector (Needle (VRep m))) w))
     (LinearMap
        s (Tensor s (GenericNeedle' m) w) (Tensor s (GenericNeedle' m) w))
forall κ (k :: κ -> κ -> *) (a :: κ) (b :: κ) (c :: κ).
(Category k, Object k a, Object k b, Object k c) =>
k b c -> k a b -> k a c
. Coercion
  (Tensor s (DualVector (Needle (VRep m))) w)
  (Tensor s (GenericNeedle' m) w)
-> Coercion
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (DualVector (Needle (VRep m))) w))
     (LinearMap
        s
        (Tensor s (DualVector (Needle (VRep m))) w)
        (Tensor s (GenericNeedle' m) w))
forall (f :: * -> *) (r :: * -> * -> *) (t :: * -> * -> *) a b.
(Functor f r t, Object r a, Object t (f a), Object r b,
 Object t (f b)) =>
r a b -> t (f a) (f b)
fmap ((DualVector (Needle (VRep m)) -> GenericNeedle' m)
-> Coercion
     (Tensor s (DualVector (Needle (VRep m))) w)
     (Tensor s (GenericNeedle' m) w)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS DualVector (Needle (VRep m)) -> GenericNeedle' m
forall m. DualVector (Needle (VRep m)) -> GenericNeedle' m
GenericNeedle') Coercion
  (LinearMap
     s
     (Tensor s (DualVector (Needle (VRep m))) w)
     (Tensor s (DualVector (Needle (VRep m))) w))
  (LinearMap
     s (Tensor s (GenericNeedle' m) w) (Tensor s (GenericNeedle' m) w))
-> LinearMap
     s
     (Tensor s (DualVector (Needle (VRep m))) w)
     (Tensor s (DualVector (Needle (VRep m))) w)
-> LinearMap
     s (Tensor s (GenericNeedle' m) w) (Tensor s (GenericNeedle' m) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ LinearMap
  s
  (Tensor s (DualVector (Needle (VRep m))) w)
  (Tensor s (DualVector (Needle (VRep m))) w)
forall v w.
(LinearSpace v, LinearSpace w, Scalar w ~ Scalar v) =>
(v ⊗ w) +> (v ⊗ w)
tensorId
  applyTensorFunctional :: Bilinear
  (DualVector (GenericNeedle' m ⊗ u))
  (GenericNeedle' m ⊗ u)
  (Scalar (GenericNeedle' m))
applyTensorFunctional = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> (LinearMap s (GenericNeedle' m) (DualVector u)
 -> Tensor s (GenericNeedle' m) u -> s)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle' m) (DualVector u))
     (LinearFunction s (Tensor s (GenericNeedle' m) u) s)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (GenericNeedle' m) (DualVector u)
  -> Tensor s (GenericNeedle' m) u -> s)
 -> LinearFunction
      s
      (LinearMap s (GenericNeedle' m) (DualVector u))
      (LinearFunction s (Tensor s (GenericNeedle' m) u) s))
-> (LinearMap s (GenericNeedle' m) (DualVector u)
    -> Tensor s (GenericNeedle' m) u -> s)
-> LinearFunction
     s
     (LinearMap s (GenericNeedle' m) (DualVector u))
     (LinearFunction s (Tensor s (GenericNeedle' m) u) s)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (GenericNeedle' m)) (DualVector u)
f) Tensor s (GenericNeedle' m) u
t ->
              (LinearFunction
  s
  (LinearMap s (DualVector (Needle (VRep m))) (DualVector u))
  (LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) s)
forall v u.
(LinearSpace v, LinearSpace u, Scalar u ~ Scalar v) =>
Bilinear (DualVector (v ⊗ u)) (v ⊗ u) (Scalar v)
applyTensorFunctionalLinearFunction
  s
  (LinearMap s (DualVector (Needle (VRep m))) (DualVector u))
  (LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) s)
-> LinearMap s (DualVector (Needle (VRep m))) (DualVector u)
-> LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) s
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct
  (DualVector (DualVector (Needle (VRep m)))) (DualVector u)
-> LinearMap s (DualVector (Needle (VRep m))) (DualVector u)
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (GenericNeedle' m)) (DualVector u)
TensorProduct
  (DualVector (DualVector (Needle (VRep m)))) (DualVector u)
f)
                 LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) s
-> Tensor s (DualVector (Needle (VRep m))) u -> s
forall s v w. LinearFunction s v w -> v -> w
-+$>(GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor s (GenericNeedle' m) u)
     (Tensor s (DualVector (Needle (VRep m))) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' Coercion
  (Tensor s (GenericNeedle' m) u)
  (Tensor s (DualVector (Needle (VRep m))) u)
-> Tensor s (GenericNeedle' m) u
-> Tensor s (DualVector (Needle (VRep m))) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (GenericNeedle' m) u
t
  applyTensorLinMap :: Bilinear ((GenericNeedle' m ⊗ u) +> w) (GenericNeedle' m ⊗ u) w
applyTensorLinMap = case DualSpaceWitness (Needle (VRep m))
forall v. LinearSpace v => DualSpaceWitness v
dualSpaceWitness :: DualSpaceWitness (Needle (VRep m)) of
       DualSpaceWitness (Needle (VRep m))
DualSpaceWitness -> (LinearMap s (Tensor s (GenericNeedle' m) u) w
 -> Tensor s (GenericNeedle' m) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (GenericNeedle' m) u) w)
     (LinearFunction s (Tensor s (GenericNeedle' m) u) w)
forall v w y. (v -> w -> y) -> Bilinear v w y
bilinearFunction ((LinearMap s (Tensor s (GenericNeedle' m) u) w
  -> Tensor s (GenericNeedle' m) u -> w)
 -> LinearFunction
      s
      (LinearMap s (Tensor s (GenericNeedle' m) u) w)
      (LinearFunction s (Tensor s (GenericNeedle' m) u) w))
-> (LinearMap s (Tensor s (GenericNeedle' m) u) w
    -> Tensor s (GenericNeedle' m) u -> w)
-> LinearFunction
     s
     (LinearMap s (Tensor s (GenericNeedle' m) u) w)
     (LinearFunction s (Tensor s (GenericNeedle' m) u) w)
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ \(LinearMap TensorProduct (DualVector (Tensor s (GenericNeedle' m) u)) w
f) Tensor s (GenericNeedle' m) u
t
                -> (LinearFunction
  s
  (LinearMap
     s
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
     w)
  (LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) w)
forall v u w.
(LinearSpace v, LinearSpace u, TensorSpace w, Scalar u ~ Scalar v,
 Scalar w ~ Scalar v) =>
Bilinear ((v ⊗ u) +> w) (v ⊗ u) w
applyTensorLinMapLinearFunction
  s
  (LinearMap
     s
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
     w)
  (LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) w)
-> LinearMap
     s
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
     w
-> LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) w
forall s v w. LinearFunction s v w -> v -> w
-+$>TensorProduct
  (DualVector
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u))
  w
-> LinearMap
     s
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u)
     w
forall s v w. TensorProduct (DualVector v) w -> LinearMap s v w
LinearMap TensorProduct (DualVector (Tensor s (GenericNeedle' m) u)) w
TensorProduct
  (DualVector
     (Tensor
        (Scalar (DualVector (Needle (VRep m))))
        (DualVector (Needle (VRep m)))
        u))
  w
f)
                    LinearFunction s (Tensor s (DualVector (Needle (VRep m))) u) w
-> Tensor s (DualVector (Needle (VRep m))) u -> w
forall s v w. LinearFunction s v w -> v -> w
-+$>(GenericNeedle' m -> DualVector (Needle (VRep m)))
-> Coercion
     (Tensor s (GenericNeedle' m) u)
     (Tensor s (DualVector (Needle (VRep m))) u)
forall v w v' (c :: * -> * -> *) s.
(TensorProduct v w ~ TensorProduct v' w) =>
c v v' -> Coercion (Tensor s v w) (Tensor s v' w)
pseudoFmapTensorLHS GenericNeedle' m -> DualVector (Needle (VRep m))
forall m. GenericNeedle' m -> DualVector (Needle (VRep m))
getGenericNeedle' Coercion
  (Tensor s (GenericNeedle' m) u)
  (Tensor s (DualVector (Needle (VRep m))) u)
-> Tensor s (GenericNeedle' m) u
-> Tensor s (DualVector (Needle (VRep m))) u
forall (f :: * -> * -> *) a b.
(Function f, Object f a, Object f b) =>
f a b -> a -> b
$ Tensor s (GenericNeedle' m) u
t
  useTupleLinearSpaceComponents :: ((LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ) -> φ
useTupleLinearSpaceComponents (LinearSpace x, LinearSpace y, Scalar x ~ Scalar y) => φ
_ = φ
forall a. a
usingNonTupleTypeAsTupleError