-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Initial project template from stack -- -- Pure haskell vectormatrixtensor library. Features -- dimensionality type-checking for all operations. Generic n-dimensional -- versions are implemented using low-level prim ops. Allows ad-hoc -- replacement with fixed low-dimensionality vectors and matrices without -- changing user interface. Please see README.md @package easytensor @version 0.1.0.0 module Numeric.Tensor data Dim (ds :: [Nat]) Dim :: Dim class Dimensions (ds :: [Nat]) dims :: Dimensions ds => Dim ds -> [Int] headDim :: Dim (d : ds) -> Proxy d tailDim :: Dim (d : ds) -> Dim ds printCrazy :: Dimensions d => Dim d -> String contraDimsType :: Tensor t n m -> Dim n coDimsType :: Tensor t n m -> Dim m contraDims :: Dimensions n => Tensor t n m -> [Int] coDims :: Dimensions m => Tensor t n m -> [Int] type Vec2 = Tensor Double '[2] '[] vec2 :: Double -> Double -> Vec2 class TensorCalculus t (ns :: [Nat]) (ms :: [Nat]) where data Tensor t ns ms type TensorStore t ns ms where { data family Tensor t ns ms; type family TensorStore t ns ms; } class Plus a plus :: Plus a => a -> a -> a newtype Vector1 t Vector1 :: t -> Vector1 t data Vector2 t Vector2 :: t -> t -> Vector2 t data Vector3 t Vector3 :: t -> t -> t -> Vector3 t data Vector4 t Vector4 :: t -> t -> t -> t -> Vector4 t newtype VectorN t (n :: Nat) VectorN :: [t] -> VectorN t newtype Matrix1x1 t Matrix1x1 :: t -> Matrix1x1 t data Matrix2x2 t Matrix2x2 :: t -> t -> t -> t -> Matrix2x2 t newtype MatrixNxM t (n :: Nat) (m :: Nat) MatrixNxM :: [[t]] -> MatrixNxM t data NDArray t NDArray :: ByteArray# -> NDArray t class AppendDim a b c | a b -> c appendDim :: AppendDim a b c => a -> b -> c instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.MatrixNxM t n m) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Matrix2x2 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Matrix1x1 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.VectorN t n) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Vector4 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Vector3 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Vector2 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Vector1 t) instance GHC.Show.Show t => GHC.Show.Show (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Float.RealFloat t => GHC.Float.RealFloat (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Real.RealFrac t => GHC.Real.RealFrac (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Real.Real t => GHC.Real.Real (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Read.Read t => GHC.Read.Read (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Classes.Ord t => GHC.Classes.Ord (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Float.Floating t => GHC.Float.Floating (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Real.Fractional t => GHC.Real.Fractional (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Num.Num t => GHC.Num.Num (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Real.Integral t => GHC.Real.Integral (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Classes.Eq t => GHC.Classes.Eq (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Enum.Enum t => GHC.Enum.Enum (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Enum.Bounded t => GHC.Enum.Bounded (Numeric.Tensor.Tensor t '[] '[]) instance GHC.Show.Show (Numeric.Tensor.Tensor t (n1 : n2 : n3 : ns) '[]) instance GHC.Show.Show (Numeric.Tensor.Tensor t (n1 : n2 : n3 : ns) '[m0]) instance GHC.Show.Show (Numeric.Tensor.Tensor t (n1 : n2 : n3 : ns) '[m0, m1]) instance GHC.Show.Show (Numeric.Tensor.Tensor t '[] (m1 : m2 : m3 : ms)) instance GHC.Show.Show (Numeric.Tensor.Tensor t '[n1] (m1 : m2 : m3 : ms)) instance GHC.Show.Show (Numeric.Tensor.Tensor t '[n1, n2] (m1 : m2 : m3 : ms)) instance GHC.Show.Show (Numeric.Tensor.Tensor t (n1 : n2 : n3 : ns) (m1 : m2 : m3 : ms)) instance GHC.Show.Show (Numeric.Tensor.SomeVector t n) => GHC.Show.Show (Numeric.Tensor.Tensor t '[n] '[]) instance Numeric.Tensor.Plus (Numeric.Tensor.SomeVector t n) => Numeric.Tensor.Plus (Numeric.Tensor.Tensor t '[n] '[]) instance GHC.Show.Show (Numeric.Tensor.SomeVector t m) => GHC.Show.Show (Numeric.Tensor.Tensor t '[] '[m]) instance Numeric.Tensor.Plus (Numeric.Tensor.SomeVector t m) => Numeric.Tensor.Plus (Numeric.Tensor.Tensor t '[] '[m]) instance GHC.Num.Num (Numeric.Tensor.SomeVector t n) => GHC.Num.Num (Numeric.Tensor.Tensor t '[n] '[]) instance GHC.Show.Show (Numeric.Tensor.SomeMatrix t n0 n1) => GHC.Show.Show (Numeric.Tensor.Tensor t '[n0, n1] '[]) instance GHC.Show.Show (Numeric.Tensor.SomeMatrix t n0 m0) => GHC.Show.Show (Numeric.Tensor.Tensor t '[n0] '[m0]) instance GHC.Show.Show (Numeric.Tensor.SomeMatrix t m0 m1) => GHC.Show.Show (Numeric.Tensor.Tensor t '[] '[m0, m1]) instance Numeric.Tensor.Dimensions '[] instance (GHC.TypeLits.KnownNat d, Numeric.Tensor.Dimensions ds) => Numeric.Tensor.Dimensions (d : ds) instance Numeric.Tensor.TensorCalculus t '[] '[] instance Numeric.Tensor.TensorCalculus t '[n] '[] instance Numeric.Tensor.TensorCalculus t '[] '[m] instance Numeric.Tensor.TensorCalculus t '[n1, n2] '[] instance Numeric.Tensor.TensorCalculus t '[n] '[m] instance Numeric.Tensor.TensorCalculus t '[] '[m1, m2] instance Numeric.Tensor.TensorCalculus t (n1 : n2 : n3 : ns) '[] instance Numeric.Tensor.TensorCalculus t (n1 : n2 : n3 : ns) '[m0] instance Numeric.Tensor.TensorCalculus t (n1 : n2 : n3 : ns) '[m0, m1] instance Numeric.Tensor.TensorCalculus t '[] (m1 : m2 : m3 : ms) instance Numeric.Tensor.TensorCalculus t '[n1] (m1 : m2 : m3 : ms) instance Numeric.Tensor.TensorCalculus t '[n1, n2] (m1 : m2 : m3 : ms) instance Numeric.Tensor.TensorCalculus t (n1 : n2 : n3 : ns) (m1 : m2 : m3 : ms) instance GHC.Num.Num t => Numeric.Tensor.Plus (Numeric.Tensor.Vector1 t) instance GHC.Num.Num t => Numeric.Tensor.Plus (Numeric.Tensor.Vector2 t) instance GHC.Num.Num t => Numeric.Tensor.Plus (Numeric.Tensor.Vector3 t) instance GHC.Num.Num t => Numeric.Tensor.Plus (Numeric.Tensor.Vector4 t) instance GHC.Num.Num t => Numeric.Tensor.Plus (Numeric.Tensor.VectorN t n) instance GHC.Show.Show (Numeric.Tensor.NDArray t) instance Numeric.Tensor.AppendDim t (Numeric.Tensor.Vector2 t) (Numeric.Tensor.Vector3 t) instance Numeric.Tensor.AppendDim t (Numeric.Tensor.Vector3 t) (Numeric.Tensor.Vector4 t) instance Numeric.Tensor.AppendDim t (Numeric.Tensor.Vector4 t) (Numeric.Tensor.VectorN t 5) instance (m ~ (n GHC.TypeLits.+ 1), 5 GHC.TypeLits.<= m, 4 GHC.TypeLits.<= n) => Numeric.Tensor.AppendDim t (Numeric.Tensor.VectorN t n) (Numeric.Tensor.VectorN t m) module Numeric.Commons class PrimBytes a -- | Store content of a data type in a primitive byte array toBytes :: PrimBytes a => a -> ByteArray# -- | Load content of a data type from a primitive byte array fromBytes :: PrimBytes a => ByteArray# -> a -- | Size of a data type in bytes byteSize :: PrimBytes a => a -> Int# -- | Alignment of a data type in bytes byteAlign :: PrimBytes a => a -> Int# -- | Primitive indexing. No checks, no safety. class FloatBytes a -- | Primitive get Float# (element offset) ixF :: FloatBytes a => Int# -> a -> Float# -- | Primitive indexing. No checks, no safety. class DoubleBytes a -- | Primitive get Double# (element offset) ixD :: DoubleBytes a => Int# -> a -> Double# -- | Primitive indexing. No checks, no safety. class IntBytes a -- | Primitive get Int# (element offset) ixI :: IntBytes a => Int# -> a -> Int# -- | Primitive indexing. No checks, no safety. class WordBytes a -- | Primitive get Word# (element offset) ixW :: WordBytes a => Int# -> a -> Word# instance Numeric.Commons.PrimBytes a => Foreign.Storable.Storable a instance Numeric.Commons.PrimBytes GHC.Types.Float instance Numeric.Commons.FloatBytes GHC.Types.Float instance Numeric.Commons.PrimBytes GHC.Types.Double instance Numeric.Commons.DoubleBytes GHC.Types.Double instance Numeric.Commons.PrimBytes GHC.Types.Int instance Numeric.Commons.IntBytes GHC.Types.Int instance Numeric.Commons.PrimBytes GHC.Int.Int8 instance Numeric.Commons.IntBytes GHC.Int.Int8 instance Numeric.Commons.PrimBytes GHC.Int.Int16 instance Numeric.Commons.IntBytes GHC.Int.Int16 instance Numeric.Commons.PrimBytes GHC.Int.Int32 instance Numeric.Commons.IntBytes GHC.Int.Int32 instance Numeric.Commons.PrimBytes GHC.Int.Int64 instance Numeric.Commons.IntBytes GHC.Int.Int64 instance Numeric.Commons.PrimBytes GHC.Types.Word instance Numeric.Commons.WordBytes GHC.Types.Word instance Numeric.Commons.PrimBytes GHC.Word.Word8 instance Numeric.Commons.WordBytes GHC.Word.Word8 instance Numeric.Commons.PrimBytes GHC.Word.Word16 instance Numeric.Commons.WordBytes GHC.Word.Word16 instance Numeric.Commons.PrimBytes GHC.Word.Word32 instance Numeric.Commons.WordBytes GHC.Word.Word32 instance Numeric.Commons.PrimBytes GHC.Word.Word64 instance Numeric.Commons.WordBytes GHC.Word.Word64 -- | This module generalizes matrices and vectors. Yet it is limited to -- rank 2, allowing for a simple and nicely type-checked interface. module Numeric.EasyTensor data Tensor t n m -- | Fill whole tensor with a single value fill :: MatrixCalculus t n m (Tensor t n m) => Tensor t 1 1 -> Tensor t n m -- | Matrix product for tensors rank 2, as well matrix-vector or -- vector-matrix products prod :: (MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k)) => Tensor t n m -> Tensor t m k -> Tensor t n k -- | Matrix product for tensors rank 2, as well matrix-vector or -- vector-matrix products (%*) :: (MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k)) => Tensor t n m -> Tensor t m k -> Tensor t n k infixl 7 %* -- | Matrix inverse inverse :: MatrixInverse (Tensor t n n) => Tensor t n n -> Tensor t n n transpose :: (MatrixCalculus t n m (Tensor t n m), MatrixCalculus t m n (Tensor t m n), PrimBytes (Tensor t m n)) => Tensor t n m -> Tensor t m n -- | Append one vector to another, adding up their dimensionality (<:>) :: (PrimBytes (Tensor t k n), PrimBytes (Tensor t k m), PrimBytes (Tensor t k (n + m))) => Tensor t k n -> Tensor t k m -> Tensor t k (n + m) infixl 5 <:> -- | Divide on the right: R = A * B^(-1) (//) :: (MatrixProduct (Tensor t n m) (Tensor t m m) (Tensor t n m), MatrixInverse (TT t m m)) => Tensor t n m -> Tensor t m m -> Tensor t n m -- | Divide on the left: R = A^(-1) * b (\\) :: (MatrixProduct (Tensor t n n) (Tensor t n m) (Tensor t n m), MatrixInverse (TT t n n)) => Tensor t n n -> Tensor t n m -> Tensor t n m -- | Get an element of a tensor index :: MatrixCalculus t n m (Tensor t n m) => Int -> Int -> Tensor t n m -> Tensor t 1 1 -- | Get a column vector of a matrix indexCol :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Int -> Tensor t n m -> Tensor t n 1 -- | Get a row vector of a matrix indexRow :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t m (Tensor t 1 m), PrimBytes (Tensor t 1 m)) => Int -> Tensor t n m -> Tensor t 1 m dimN :: (MatrixCalculus t n m (Tensor t n m)) => Tensor t n m -> Int dimM :: (MatrixCalculus t n m (Tensor t n m)) => Tensor t n m -> Int -- | Scalar product -- sum of Vecs' components products, propagated into -- whole Vec (.*.) :: VectorCalculus t n v => v -> v -> v -- | Dot product of two vectors dot :: VectorCalculus t n v => v -> v -> Tensor t 1 1 -- | Dot product of two vectors (·) :: VectorCalculus t n v => v -> v -> Tensor t 1 1 infixl 7 `·` -- | Sum of absolute values normL1 :: VectorCalculus t n v => v -> Tensor t 1 1 -- | hypot function (square root of squares) normL2 :: VectorCalculus t n v => v -> Tensor t 1 1 -- | Maximum of absolute values normLPInf :: VectorCalculus t n v => v -> Tensor t 1 1 -- | Minimum of absolute values normLNInf :: VectorCalculus t n v => v -> Tensor t 1 1 -- | Norm in Lp space normLP :: VectorCalculus t n v => Int -> v -> Tensor t 1 1 -- | Identity matrix. Mat with 1 on diagonal and 0 elsewhere eye :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -- | Put the same value on the Mat diagonal, 0 otherwise diag :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t 1 1 -> Tensor t n n -- | Determinant of Mat det :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1 -- | Sum of diagonal elements trace :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1 -- | Set Vec values into the diagonal elements of Mat toDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n 1 -> Tensor t n n -- | Set Vec values into the diagonal elements of Mat toDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t 1 n -> Tensor t n n -- | Get the diagonal elements from Mat into Vec fromDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n n -> Tensor t n 1 -- | Get the diagonal elements from Mat into Vec fromDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t n n -> Tensor t 1 n type Mat t n m = Tensor t n m type Vec t n = Tensor t n 1 type Vec' t m = Tensor t 1 m type Vec2f = Tensor Float 2 1 type Vec3f = Tensor Float 3 1 type Vec4f = Tensor Float 4 1 type Vec2f' = Tensor Float 1 2 type Vec3f' = Tensor Float 1 3 type Vec4f' = Tensor Float 1 4 type Mat22f = Tensor Float 2 2 type Mat23f = Tensor Float 2 3 type Mat24f = Tensor Float 2 4 type Mat32f = Tensor Float 3 2 type Mat33f = Tensor Float 3 3 type Mat34f = Tensor Float 3 4 type Mat42f = Tensor Float 4 2 type Mat43f = Tensor Float 4 3 type Mat44f = Tensor Float 4 4 scalar :: t -> Tensor t 1 1 vec2 :: Vector2D t => t -> t -> Tensor t 2 1 vec3 :: Vector3D t => t -> t -> t -> Tensor t 3 1 vec4 :: Vector4D t => t -> t -> t -> t -> Tensor t 4 1 vec2' :: Vector2D t => t -> t -> Tensor t 1 2 vec3' :: Vector3D t => t -> t -> t -> Tensor t 1 3 vec4' :: Vector4D t => t -> t -> t -> t -> Tensor t 1 4 -- | Compose a 2x2D matrix mat22 :: Matrix2x2 t => Tensor t 2 1 -> Tensor t 2 1 -> Tensor t 2 2 -- | Compose a 3x3D matrix mat33 :: (PrimBytes (Tensor t 3 3), PrimBytes (Tensor t 3 2), PrimBytes (Tensor t 3 1)) => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 3 -- | Compose a 4x4D matrix mat44 :: (PrimBytes (Tensor t 4 4), PrimBytes (Tensor t 4 3), PrimBytes (Tensor t 4 2), PrimBytes (Tensor t 4 1)) => Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 4 det2 :: Vector2D t => Tensor t 2 1 -> Tensor t 2 1 -> Tensor t 1 1 det2' :: Vector2D t => Tensor t 1 2 -> Tensor t 1 2 -> Tensor t 1 1 -- | Cross product for two vectors in 3D cross :: Vector3D t => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1 -- | Cross product for two vectors in 3D (×) :: Vector3D t => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1 infixl 7 × instance Numeric.Commons.WordBytes t => Numeric.Commons.WordBytes (Numeric.EasyTensor.Scalar t) instance Numeric.Commons.IntBytes t => Numeric.Commons.IntBytes (Numeric.EasyTensor.Scalar t) instance Numeric.Commons.DoubleBytes t => Numeric.Commons.DoubleBytes (Numeric.EasyTensor.Scalar t) instance Numeric.Commons.FloatBytes t => Numeric.Commons.FloatBytes (Numeric.EasyTensor.Scalar t) instance Numeric.Commons.PrimBytes t => Numeric.Commons.PrimBytes (Numeric.EasyTensor.Scalar t) instance GHC.Float.RealFloat t => GHC.Float.RealFloat (Numeric.EasyTensor.Scalar t) instance GHC.Real.RealFrac t => GHC.Real.RealFrac (Numeric.EasyTensor.Scalar t) instance GHC.Real.Real t => GHC.Real.Real (Numeric.EasyTensor.Scalar t) instance GHC.Read.Read t => GHC.Read.Read (Numeric.EasyTensor.Scalar t) instance GHC.Classes.Ord t => GHC.Classes.Ord (Numeric.EasyTensor.Scalar t) instance GHC.Float.Floating t => GHC.Float.Floating (Numeric.EasyTensor.Scalar t) instance GHC.Real.Fractional t => GHC.Real.Fractional (Numeric.EasyTensor.Scalar t) instance GHC.Num.Num t => GHC.Num.Num (Numeric.EasyTensor.Scalar t) instance GHC.Real.Integral t => GHC.Real.Integral (Numeric.EasyTensor.Scalar t) instance GHC.Classes.Eq t => GHC.Classes.Eq (Numeric.EasyTensor.Scalar t) instance GHC.Enum.Enum t => GHC.Enum.Enum (Numeric.EasyTensor.Scalar t) instance GHC.Enum.Bounded t => GHC.Enum.Bounded (Numeric.EasyTensor.Scalar t) instance GHC.Classes.Eq (Numeric.EasyTensor.TT t n m) => GHC.Classes.Eq (Numeric.EasyTensor.Tensor t n m) instance GHC.Classes.Ord (Numeric.EasyTensor.TT t n m) => GHC.Classes.Ord (Numeric.EasyTensor.Tensor t n m) instance GHC.Num.Num (Numeric.EasyTensor.TT t n m) => GHC.Num.Num (Numeric.EasyTensor.Tensor t n m) instance GHC.Real.Fractional (Numeric.EasyTensor.TT t n m) => GHC.Real.Fractional (Numeric.EasyTensor.Tensor t n m) instance GHC.Float.Floating (Numeric.EasyTensor.TT t n m) => GHC.Float.Floating (Numeric.EasyTensor.Tensor t n m) instance Numeric.Vector.Class.VectorCalculus t n (Numeric.EasyTensor.TT t n 1) => Numeric.Vector.Class.VectorCalculus t n (Numeric.EasyTensor.Tensor t n 1) instance Numeric.Vector.Class.VectorCalculus t m (Numeric.EasyTensor.TT t 1 m) => Numeric.Vector.Class.VectorCalculus t m (Numeric.EasyTensor.Tensor t 1 m) instance Numeric.Matrix.Class.MatrixCalculus t n m (Numeric.EasyTensor.TT t n m) => Numeric.Matrix.Class.MatrixCalculus t n m (Numeric.EasyTensor.Tensor t n m) instance Numeric.Matrix.Class.SquareMatrixCalculus t n (Numeric.EasyTensor.TT t n n) => Numeric.Matrix.Class.SquareMatrixCalculus t n (Numeric.EasyTensor.Tensor t n n) instance Numeric.Matrix.Class.MatrixInverse (Numeric.EasyTensor.TT t n n) => Numeric.Matrix.Class.MatrixInverse (Numeric.EasyTensor.Tensor t n n) instance Numeric.Commons.PrimBytes (Numeric.EasyTensor.TT t n m) => Numeric.Commons.PrimBytes (Numeric.EasyTensor.Tensor t n m) instance Numeric.Commons.FloatBytes (Numeric.EasyTensor.TT t n m) => Numeric.Commons.FloatBytes (Numeric.EasyTensor.Tensor t n m) instance Numeric.Commons.DoubleBytes (Numeric.EasyTensor.TT t n m) => Numeric.Commons.DoubleBytes (Numeric.EasyTensor.Tensor t n m) instance Numeric.Commons.IntBytes (Numeric.EasyTensor.TT t n m) => Numeric.Commons.IntBytes (Numeric.EasyTensor.Tensor t n m) instance Numeric.Commons.WordBytes (Numeric.EasyTensor.TT t n m) => Numeric.Commons.WordBytes (Numeric.EasyTensor.Tensor t n m) instance GHC.Classes.Eq (Numeric.Vector.Family.Vector t n) => GHC.Classes.Eq (Numeric.EasyTensor.CoVector t n) instance GHC.Classes.Ord (Numeric.Vector.Family.Vector t n) => GHC.Classes.Ord (Numeric.EasyTensor.CoVector t n) instance GHC.Num.Num (Numeric.Vector.Family.Vector t n) => GHC.Num.Num (Numeric.EasyTensor.CoVector t n) instance GHC.Real.Fractional (Numeric.Vector.Family.Vector t n) => GHC.Real.Fractional (Numeric.EasyTensor.CoVector t n) instance GHC.Float.Floating (Numeric.Vector.Family.Vector t n) => GHC.Float.Floating (Numeric.EasyTensor.CoVector t n) instance Numeric.Commons.PrimBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.PrimBytes (Numeric.EasyTensor.CoVector t n) instance Numeric.Vector.Class.VectorCalculus t n (Numeric.Vector.Family.Vector t n) => Numeric.Vector.Class.VectorCalculus t n (Numeric.EasyTensor.CoVector t n) instance Numeric.Commons.FloatBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.FloatBytes (Numeric.EasyTensor.CoVector t n) instance Numeric.Commons.DoubleBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.DoubleBytes (Numeric.EasyTensor.CoVector t n) instance Numeric.Commons.IntBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.IntBytes (Numeric.EasyTensor.CoVector t n) instance Numeric.Commons.WordBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.WordBytes (Numeric.EasyTensor.CoVector t n) instance GHC.Classes.Eq (Numeric.Vector.Family.Vector t n) => GHC.Classes.Eq (Numeric.EasyTensor.ContraVector t n) instance GHC.Classes.Ord (Numeric.Vector.Family.Vector t n) => GHC.Classes.Ord (Numeric.EasyTensor.ContraVector t n) instance GHC.Num.Num (Numeric.Vector.Family.Vector t n) => GHC.Num.Num (Numeric.EasyTensor.ContraVector t n) instance GHC.Real.Fractional (Numeric.Vector.Family.Vector t n) => GHC.Real.Fractional (Numeric.EasyTensor.ContraVector t n) instance GHC.Float.Floating (Numeric.Vector.Family.Vector t n) => GHC.Float.Floating (Numeric.EasyTensor.ContraVector t n) instance Numeric.Commons.PrimBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.PrimBytes (Numeric.EasyTensor.ContraVector t n) instance Numeric.Vector.Class.VectorCalculus t n (Numeric.Vector.Family.Vector t n) => Numeric.Vector.Class.VectorCalculus t n (Numeric.EasyTensor.ContraVector t n) instance Numeric.Commons.FloatBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.FloatBytes (Numeric.EasyTensor.ContraVector t n) instance Numeric.Commons.DoubleBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.DoubleBytes (Numeric.EasyTensor.ContraVector t n) instance Numeric.Commons.IntBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.IntBytes (Numeric.EasyTensor.ContraVector t n) instance Numeric.Commons.WordBytes (Numeric.Vector.Family.Vector t n) => Numeric.Commons.WordBytes (Numeric.EasyTensor.ContraVector t n) instance GHC.Classes.Eq (Numeric.Matrix.Family.Matrix t n m) => GHC.Classes.Eq (Numeric.EasyTensor.Matrix t n m) instance GHC.Classes.Ord (Numeric.Matrix.Family.Matrix t n m) => GHC.Classes.Ord (Numeric.EasyTensor.Matrix t n m) instance GHC.Num.Num (Numeric.Matrix.Family.Matrix t n m) => GHC.Num.Num (Numeric.EasyTensor.Matrix t n m) instance GHC.Real.Fractional (Numeric.Matrix.Family.Matrix t n m) => GHC.Real.Fractional (Numeric.EasyTensor.Matrix t n m) instance GHC.Float.Floating (Numeric.Matrix.Family.Matrix t n m) => GHC.Float.Floating (Numeric.EasyTensor.Matrix t n m) instance Numeric.Commons.PrimBytes (Numeric.Matrix.Family.Matrix t n m) => Numeric.Commons.PrimBytes (Numeric.EasyTensor.Matrix t n m) instance Numeric.Matrix.Class.MatrixCalculus t n m (Numeric.Matrix.Family.Matrix t n m) => Numeric.Matrix.Class.MatrixCalculus t n m (Numeric.EasyTensor.Matrix t n m) instance Numeric.Matrix.Class.SquareMatrixCalculus t n (Numeric.Matrix.Family.Matrix t n n) => Numeric.Matrix.Class.SquareMatrixCalculus t n (Numeric.EasyTensor.Matrix t n n) instance Numeric.Matrix.Class.MatrixInverse (Numeric.Matrix.Family.Matrix t n n) => Numeric.Matrix.Class.MatrixInverse (Numeric.EasyTensor.Matrix t n n) instance Numeric.Commons.FloatBytes (Numeric.Matrix.Family.Matrix t n m) => Numeric.Commons.FloatBytes (Numeric.EasyTensor.Matrix t n m) instance Numeric.Commons.DoubleBytes (Numeric.Matrix.Family.Matrix t n m) => Numeric.Commons.DoubleBytes (Numeric.EasyTensor.Matrix t n m) instance Numeric.Commons.IntBytes (Numeric.Matrix.Family.Matrix t n m) => Numeric.Commons.IntBytes (Numeric.EasyTensor.Matrix t n m) instance Numeric.Commons.WordBytes (Numeric.Matrix.Family.Matrix t n m) => Numeric.Commons.WordBytes (Numeric.EasyTensor.Matrix t n m) instance GHC.Show.Show (Numeric.EasyTensor.TT t n m) => GHC.Show.Show (Numeric.EasyTensor.Tensor t n m) instance GHC.Show.Show t => GHC.Show.Show (Numeric.EasyTensor.Scalar t) instance GHC.Show.Show (Numeric.Vector.Family.Vector t n) => GHC.Show.Show (Numeric.EasyTensor.CoVector t n) instance GHC.Show.Show (Numeric.Vector.Family.Vector t n) => GHC.Show.Show (Numeric.EasyTensor.ContraVector t n) instance GHC.Show.Show (Numeric.Matrix.Family.Matrix t n m) => GHC.Show.Show (Numeric.EasyTensor.Matrix t n m) instance (Numeric.Commons.FloatBytes (Numeric.EasyTensor.Tensor GHC.Types.Float n m), Numeric.Commons.FloatBytes (Numeric.EasyTensor.Tensor GHC.Types.Float m k), Numeric.Commons.PrimBytes (Numeric.EasyTensor.Tensor GHC.Types.Float n k), Numeric.Matrix.Class.MatrixCalculus GHC.Types.Float n m (Numeric.EasyTensor.Tensor GHC.Types.Float n m), Numeric.Matrix.Class.MatrixCalculus GHC.Types.Float m k (Numeric.EasyTensor.Tensor GHC.Types.Float m k)) => Numeric.Matrix.Class.MatrixProduct (Numeric.EasyTensor.Tensor GHC.Types.Float n m) (Numeric.EasyTensor.Tensor GHC.Types.Float m k) (Numeric.EasyTensor.Tensor GHC.Types.Float n k) instance (Numeric.Commons.DoubleBytes (Numeric.EasyTensor.Tensor GHC.Types.Double n m), Numeric.Commons.DoubleBytes (Numeric.EasyTensor.Tensor GHC.Types.Double m k), Numeric.Commons.PrimBytes (Numeric.EasyTensor.Tensor GHC.Types.Double n k), Numeric.Matrix.Class.MatrixCalculus GHC.Types.Double n m (Numeric.EasyTensor.Tensor GHC.Types.Double n m), Numeric.Matrix.Class.MatrixCalculus GHC.Types.Double m k (Numeric.EasyTensor.Tensor GHC.Types.Double m k)) => Numeric.Matrix.Class.MatrixProduct (Numeric.EasyTensor.Tensor GHC.Types.Double n m) (Numeric.EasyTensor.Tensor GHC.Types.Double m k) (Numeric.EasyTensor.Tensor GHC.Types.Double n k) instance GHC.Num.Num t => Numeric.Vector.Class.VectorCalculus t 1 (Numeric.EasyTensor.Scalar t) instance GHC.Num.Num t => Numeric.Matrix.Class.MatrixCalculus t 1 1 (Numeric.EasyTensor.Scalar t) instance GHC.Num.Num t => Numeric.Matrix.Class.SquareMatrixCalculus t 1 (Numeric.EasyTensor.Scalar t) instance GHC.Real.Fractional t => Numeric.Matrix.Class.MatrixInverse (Numeric.EasyTensor.Scalar t) instance (GHC.TypeLits.KnownNat n, Numeric.Vector.Class.VectorCalculus t n (Numeric.Vector.Family.Vector t n)) => Numeric.Matrix.Class.MatrixCalculus t n 1 (Numeric.EasyTensor.ContraVector t n) instance (GHC.TypeLits.KnownNat m, Numeric.Vector.Class.VectorCalculus t m (Numeric.Vector.Family.Vector t m)) => Numeric.Matrix.Class.MatrixCalculus t 1 m (Numeric.EasyTensor.CoVector t m)